Я пытаюсь использовать общий класс EntityTypeConfiguration для настройки первичного ключа для всех моих сущностей, чтобы каждый производный класс конфигурации не повторялся. Все мои сущности реализуют общий интерфейс IEntity (который говорит, что каждая сущность должна иметь свойство Id типа int).
Мой базовый класс конфигурации выглядит следующим образом:
public class EntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity>
where TEntity : class , IEntity {
public EntityConfiguration() {
HasKey( e => e.Id );
Property( e => e.Id ).HasDatabaseGeneratedOption( DatabaseGeneratedOption.Identity );
}
}
Каждая сущность затем имеет свой собственный определенный класс конфигурации, расширяющий этот один вроде этого:
public class CustomerConfiguration : EntityConfiguration<Customer> {
public CustomerConfiguration() : base() {
// Entity specific configuration here
}
}
Компилируется нормально, необработанное сообщение = ключевой компонент «Id» не является объявленной собственностью на введите «Клиент». Убедитесь, что он не были явно исключены из модель и что это действительный примитив свойство. Source = EntityFramework
Если я изменю класс CustomerConfiguration на расширение от EntityTypeConfiguration
Для справки, здесь другие задействованные классы:
public interface IEntity {
int Id { get; set; }
}
public class Customer : IEntity {
public virtual int Id { get; set; }
public virtual string name { get; set; }
}
Спасибо!