так в моем случае: чтобы отобразить также свойства из базового класса, я должен добавить одну строку кода m.MapInheritedProperties () ...
аюсь использовать общий класс 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» не является объявленным свойством типа «Клиент». Убедитесь, что он не был явно исключен из модели и является допустимым примитивным свойством. Источник = 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; }
}
Спасибо!