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