2012-05-18 41 views
2

我試圖在實現接口的幾個實體上重新使用一些模型配置。EF 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 

,你可以看到我試圖調用擴展方法「ConfigureAsAuditable」我onmodelcreating方法是這樣的:

EntityTypeConfiguration<Account> conf = null; 

    conf = modelBuilder.Entity<Account>(); 
    conf.ToTable("dbo.taccount"); 

    conf.ConfigureAsAuditable(); 

調試時我得到這個例外:

屬性'CreatedOn'不是 類型的聲明屬性Accou NT」。通過使用Ignore方法或NotMappedAttribute數據註釋驗證該屬性是否未從模型明確排除 。確保它是一個有效的基本屬性。

感謝提前:) PD: 我使用EF 5-RC,VS 2011和.NET Framework 4.5

回答

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