我正在使用Code First構造連接到現有數據庫(我知道這在技術上首先不是代碼)。我這樣做,以便我可以使用LINQ to Entities而不是LINQ to SQL來模擬僞造數據存儲庫。在去年的CTP3中,這個效果很好 - 我可以爲我的表創建一個新的配置,並顯式添加映射到數據庫的POCO的屬性。禁用或關閉基於POCO屬性的映射的自動生成
2011年7月,Code First被列入EF4.1,所以我想我會升級。不幸的是,EF現在太聰明瞭,不適合我。例如,a)假設我的POCO的所有屬性映射到數據庫字段,例如,屬性Person.TempPassword {get; set;}會導致生成的SQL在我的Person表中搜索TempPassword列; b)如果我從我的POCO繼承了一個類(例如Employee從Person繼承),EF開始生成Discriminator列等。
我知道我可以使用Ignore()或[NotMapped]屬性來解決前一個問題但是這是一個很大的麻煩,我寧願不這樣做。後一個問題我無法解決。
我需要的是一種能夠關閉所有這些智能的方法,只是讓我明確地設置屬性,就像我以前那樣。請注意,我試圖刪除每一個約束,例如modelBuilder.Conventions.Remove();我也覆蓋了對OnModelCreating()的調用,而不是調用base.OnModelCreating(),只是包含了我自己的配置代碼,如下所示。
我的配置的一個例子是:
public class AddressBookConfiguration : EntityTypeConfiguration<AddressBook>{
public AddressBookConfiguration()
{
this.HasKey(x => x.AddressBookID);
this.ToTable("AddressBook");
this.Property(x => x.AddressBookID);
this.Property(x => x.AddressBookName);
this.Property(x => x.WhenCreated);
this.Property(x => x.TotalItems);
}
}
謝謝。