我正在尝试在实现接口的几个实体上重用一些模型配置。
检查此代码:
public static void ConfigureAsAuditable<T>(this EntityTypeConfiguration<T> thisRef)
where T : class, IAuditable
{
thisRef.Property(x => x.CreatedOn)
.HasColumnName("utctimestamp")
.IsRequired();
thisRef.Property(x => x.LastUpdate)
.HasColumnName("utclastchanged")
.IsRequired();
} // ConfigureAsAuditable
你可以看到我试图在我的onmodelcreating方法上调用扩展方法“ConfigureAsAuditable”,如下所示:
EntityTypeConfiguration<Account> conf = null;
conf = modelBuilder.Entity<Account>();
conf.ToTable("dbo.taccount");
conf.ConfigureAsAuditable();
调试时我得到这个例外:
属性'CreatedOn'不是类型的声明属性 '帐户'。验证是否未明确排除该属性 通过使用Ignore方法或NotMappedAttribute数据从模型中 注解。确保它是有效的原始属性。
提前致谢:) PD: 我正在使用EF 5-rc,VS 2011和.NET Framework 4.5
答案 0 :(得分:2)
我认为更好的方法是实现自己的EntityTypeConfiguration派生版本。例如:
public class MyAuditableConfigurationEntityType<T> : EntityTypeConfiguration<T>
where T : class, IAuditable{
public bool IsAuditable{get;set;}
}
然后,在构建模型时,使用新类型:
var accountConfiguration = new MyAuditableConfigurationEntityType<Account>();
accountConfiguration.IsAuditable = true; // or whatever you need to set
accountConfiguration.(HasKey/Ignore/ToTable/Whatever)
modelBuilder.Configurations.Add(accountConfiguration);