我想使用一个普通的EntityTypeConfiguration类来配置我的所有实体的主键,以便每个派生的配置类不会重复自己。我的所有实体都实现了一个通用接口IEntity(它表示每个实体必须具有int类型的Id属性)。实体框架4.1 RC:代码第一个EntityTypeConfiguration继承问题
我的配置基础类看起来是这样的:
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是 未处理消息=关键组件 'Id'不是 类型'Customer'的声明属性。确认它没有明确地从 模型中排除 ,并且它是有效的基元 属性。来源=的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; }
}
谢谢!
是的,这是真的,但个人而言,我不喜欢依赖这些约定,并且在可能的情况下我想要配置明确,自我记录和版本控制。迟早会有些东西可能不适合公约,所以这些问题应该可以预先解决。这个简化示例中还没有显示一些共享配置,我不确定该约定是否会自动处理。 – Jamie 2011-04-08 12:17:37
“我不喜欢依赖于约定” - 然后编写一个测试,当约定发生变化时它会失败,记录事实(用代码或其他方式)是不太理想的方法 – RhysC 2014-08-22 04:11:43