Entity Framework 4.1 RC: Code First Проблема наследования EntityTypeConfiguration

Я пытаюсь использовать общий класс 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 и повторю конфигурацию первичного ключа, тогда он будет работать нормально, но я потеряю возможность совместно использовать общую конфигурацию (принцип DRY является мотивацией).

  • Я здесь что-то делаю не так?
  • Есть ли другой способ поделиться общей конфигурацией между объектами?

Для справки, здесь другие задействованные классы:

public interface IEntity {

    int Id { get; set; }

}

public class Customer : IEntity {

    public virtual int Id { get; set; }

    public virtual string name { get; set; }

}

Спасибо!

11
задан Ladislav Mrnka 10 April 2011 в 21:52
поделиться