entityframework4.1RC:CodeFirstEntityTypeConfiguration继承问题每个派生的Configuration类都不重复。我所有的实体都实现了一个公共接口IEntity(它表示每个实体都必须有一个int类型的Id属性)。我的配置基类如下所示:Property(e=>e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);然后每个实体都有自己特定的配置类,如下所示:在运行时,当EF4.1RC尝试创建模型时,我抛出以下异常:System.InvalidOperationExceptionUnhandledMessage=Keycomponent'Id'isnotadeclaredpropertyoftype'Customer'。验证它没有被明确地从模型中排除,并且它是一个有效的原始属性。source=EntityFramework如果我更改CustomerConfiguration类以从EntityTypeConfiguration扩展并重复主键配置,那么它工作正常,但我失去了共享通用配置的能力(DRY主体是动机)。在这里引用其他类:publicinterfaceIEntity{intId{get;放;}}publicclassCustomer:IEntity{publicvirtualintId{get;放;}publicvirtualstringname{get;放;}}谢谢!我不认为你需要经历所有这些。EF4.1CodeFirst使用了很多约定优于配置,这样,实体的Id属性被配置为主键。因此,通过在您的实体上实现IEntity接口,您将使用Id作为主键来设置它们。这是ADO.NET团队博客的链接,解释了主键约定的工作原理-来自CodeFirst的约定看起来这些配置存在一些接口问题。如果将IEntity更改为EntityBase它会起作用:publicclassEntityBase{publicvirtualintId{get;放;}}publicclassCustomer:EntityBase{publicvirtualstringName{get;放;}}publicclassEntityConfiguration:EntityTypeConfiguration其中TEntity:EntityBase{publicEntityConfiguration(){HasKey(e=>e.Id);Property(e=>e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);}}publicclassCustomerConfiguration:EntityConfiguration{publicCustomerConfiguration():base(){...}}您可以在类上创建静态方法并将实体传递给它。例如:publicclassCustomerConfiguration:EntityConfiguration{publicCustomerConfiguration():base(){...EntityConfiguration.Configure(this);}}publicstaticclassEntityConfiguration{publicstaticvoidConfigure(EntityTypeConfigurationentity)whereTEntity:EntityBase{entity.Has(e=>e.Id);entity.Property(e=>e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);当我有带有Id属性的通用抽象类以及抽象成员和自定义属性的实现时,我遇到了与EF5.0类似的问题。看起来实体框架代码首先只查找映射的类属性。我正在尝试使用反射器-看起来我是对的,但不是100%确定这一点。而且,幸运的是,找到了一个解决方案:protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder)modelBuilder.Entity().Map(m=>{**m.MapInheritedProperties();**});所以在我的例子中:要从基类映射属性,我必须添加一行代码m。对大家有用,需要了解更多的C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
