2016-08-20 3 views
4

У меня есть базовый класс под названием «Entity», в который я помещаю стандартные поля, которые должны быть унаследованы любой сущностью (например, Id, CreateAt, UpdateAt). Я предпочитаю использовать FluentAPI, поскольку он считается более мощным, чем аннотации, и позволяет использовать чистые легко читаемые классы POCO. Есть ли способ настроить атрибуты на этих полях в свободном api для родительского класса сущности и унаследовать его, но также не генерировать таблицу в базе данных для класса «Entity» POCO?Скажите EF6 не сохранять базовый класс, но установите флаги FluentAPI

+0

Не можете ли вы просто отметить аннотация базового класса? – Fran

ответ

1

Нормальная конфигурация объекта будет что-то вроде этого:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Planet>().HasKey(b => b.Id); 
} 

Однако, как вы заметили, это будет также зарегистрировать тип как часть вашей модели. Entity Framework 6, хотя ввел метод DbModelBuilder.Types<T>, который в соответствии с Документами:

начинает конфигурацию облегченной конвенции, которая применяется ко всем объектам и сложным типам в модели, которые наследуют от или реализуют тип, заданный общий аргумент. Этот метод не регистрирует типы как часть модели.

Это означает, что вы можете настроить свой базовый класс сущностей, как это:

modelBuilder.Types<Entity>().Configure(c => 
{ 
    c.HasKey(e => e.Id); 
}); 

Который спасает вас, чтобы сделать это для каждого типа, который наследует от Entity.

+0

Итак, позвольте мне понять это прямо. Должен ли я по-прежнему создавать класс Entity POCO. И тогда мои другие сущности наследуют от него. Или я делаю это вместо своего класса Entity? – Dblock247

+0

После того, как я прочитал ваш ответ, я наткнулся на это. modelBuilder.Ignore () ;. Будет ли это работать для меня? Потому что я не хочу, чтобы каждая сущность создавала эти свойства. Только те, которые я специально наследую от Сущности. – Dblock247

+0

С этим вы по-прежнему будете иметь класс «Entity». Мне сейчас нечего тестировать, но я подозреваю, что 'Ignore ' будет каскадировать до всех ваших объектов таким же образом, как и исходная проблема. – DavidG