EntityFramework расширяет базовую модель в другой DLL

У меня есть DLL с базовой моделью, использующей сначала код EF 4.3. Я хочу расширить определенные модели в этой dll дополнительными полями.

например в BaseModel.DLL

namespace BaseModel
{
   public class Account
   {
       public Id { get;set;}
       public string Name {get;set;}
   }
}

в ссылочном проекте я хочу расширить модель учетной записи (и таблицу БД):

public class Account : BaseModel.Account
{
    public string SomeAdditionalInfo { get;set;}
}

Я хочу получить таблицу Account с полями

Id
Name
SomeAdditionalInfo

Таким образом, я могу повторно использовать BaseModel (и логику) в нескольких похожих проектах. Думаю, я не могу использовать частичные классы, потому что мы говорим о разных DLL. Может наследство? Я пробовал несколько способов, но у меня продолжают возникать конфликты из-за наличия двух моделей с одинаковым именем.

Любые подсказки? чаевые? решения?


person Jeroen    schedule 23.11.2012    source источник


Ответы (1)


Вы можете использовать наследование через Table per Hierarchy. Вы можете создать базовый класс AccountBase и дочерний класс Account:AccountBase:

public class AccountBase
{
   public Id { get;set;}
   public string Name {get;set;}
}
public class Account : AccountBase
{
    public string SomeAdditionalInfo { get;set;}
}

Он генерирует таблицу AccountBase, которая будет содержать столбцы Id, Name, SomeAdditionalInfo. Также будет столбец Discriminator, который будет содержать экземпляр того, какой класс содержится в этой строке.

person Kirill Bestemyanov    schedule 23.11.2012
comment
Не будет ли у меня проблем с внешними ключами? В базовой модели хотелось бы использовать AccountBaseId, а в другой модели AccountId? - person Jeroen; 23.11.2012
comment
Я рекомендую вам использовать в базовой модели свойство Id (как первичный ключ), и это свойство будет унаследовано в дочерних классах. - person Kirill Bestemyanov; 23.11.2012
comment
В классе, у которого есть внешний ключ, вы можете установить имя столбца внешнего ключа с помощью свободного интерфейса. - person Kirill Bestemyanov; 24.11.2012