Я пытаюсь использовать общий класс 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
}
}
Он прекрасно компилируется, но проблема, с которой я сталкиваюсь, заключается в том, что во время выполнения я получаю следующее исключение, возникающее при попытке создания EF 4.1 RCмодель:
System.InvalidOperationException не обработано. Message = Ключевой компонент 'Id' не является объявленным свойством типа 'Customer'.Убедитесь, что он не был явно исключен из модели и является допустимым примитивным свойством.Source = EntityFramework
Если я изменю класс CustomerConfiguration для расширения от EntityTypeConfiguration и повторю конфигурацию первичного ключа, то он работает нормально, но я теряю возможность использовать общую конфигурацию (принцип DRY являетсямотивация).
- Я что-то здесь не так делаю?
- Есть ли другой способ поделиться общей конфигурацией между сущностями?
Для справки здесьдругие участвующие классы:
public interface IEntity {
int Id { get; set; }
}
public class Customer : IEntity {
public virtual int Id { get; set; }
public virtual string name { get; set; }
}
Спасибо!