2016-01-14 3 views
2

Мне просто интересно, есть ли способ сопоставления свойств класса с интерфейсом без изменения их имен.Свойства карты Класс для интерфейса

Допустим, вы импортировали некоторые объекты из базы данных

public partial class Post 
{ 
    public int PostId {get; set;} 
} 

public partial class Book 
{ 
    public int BookId {get; set;} 
} 

и интерфейс:

public interface IHasID 
{ 
    int Id {get; set;} 
} 

есть способ, чтобы наследовать от этого интерфейса и просто карта Свойства, используя атрибуты, как:

public partial class Post : IHasID 
{ 
    [MetadataTypeAttribute(typeof(IHasID.Id))] 
    public int PostId; 
} 

Я просто хочу простой способ сделать это без упаковки всех c ода или изменения базы данных. Есть ли способ обернуть класс parital, чтобы указать его свойство как свойство интерфейса?

ответ

2

Вы можете создать ID свойство, которое получает и устанавливает соответствующий идентификатор вашего объекта, как это:

public partial class Post : IHasID 
{ 
    [NotMapped] 
    public int Id 
    { 
     get { return PostId; } 
     set { PostId = value; } 
    } 

    public int PostId { get; set; } 

    ... 

Вы бы, конечно, сделать то же самое для Book.

+1

Это работает спасибо, я буду отметьте его как ответ, когда выделенное время поднялось –

1

Я не уверен, что стоит отметить, только ради знания, что, если бы это было vb.net, вы могли бы сделать это так же, как это:

Partial Public Class Post 
    Implements IHasID 

    Public Property PostId As Integer Implements IHasID.Id 
End Class 
+0

Спасибо, Было бы здорово, если бы это переводилось на C#, как-то как –

+1

Было бы. Я люблю C# и использую его почти исключительно сейчас, но я начал свою карьеру в VB.NET, и я вижу много необоснованной ненависти VB.NET от любителей C#. На самом деле, есть много мест, таких как, где VB.NET опережает C#. –

+0

Не все знают каждый язык. Обычно теги дают намек на то, какой язык является предпочтительным. Ответ VB хорош, если автор готов использовать его или готов к [некоторым трюкам] (http://stackoverflow.com/q/862723/1997232). Что может быть не так. Который вы можете прояснить в комментариях в первую очередь. Я не был бы рад получить vb.net (или tbh любой в другом, чем язык C#), отвечая на один из вопросов «C#». – Sinatr

Смежные вопросы