EF 5重新使用实体配置

时间:2012-05-18 17:43:55

标签: entity-framework-5

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

检查此代码:

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

1 个答案:

答案 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);