2

我正在尝试在几个实现接口的实体上重用一些模型配置。

检查此代码:

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

4

1 回答 1

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);
于 2012-09-30T14:44:56.597 回答