У меня есть базовый класс под названием «Entity», в который я помещаю стандартные поля, которые должны быть унаследованы любой сущностью (например, Id, CreateAt, UpdateAt). Я предпочитаю использовать FluentAPI, поскольку он считается более мощным, чем аннотации, и позволяет использовать чистые легко читаемые классы POCO. Есть ли способ настроить атрибуты на этих полях в свободном api для родительского класса сущности и унаследовать его, но также не генерировать таблицу в базе данных для класса «Entity» POCO?Скажите EF6 не сохранять базовый класс, но установите флаги FluentAPI
ответ
Нормальная конфигурация объекта будет что-то вроде этого:
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
.
Итак, позвольте мне понять это прямо. Должен ли я по-прежнему создавать класс Entity POCO. И тогда мои другие сущности наследуют от него. Или я делаю это вместо своего класса Entity? – Dblock247
После того, как я прочитал ваш ответ, я наткнулся на это. modelBuilder.Ignore
С этим вы по-прежнему будете иметь класс «Entity». Мне сейчас нечего тестировать, но я подозреваю, что 'Ignore
Не можете ли вы просто отметить аннотация базового класса? – Fran