2011-09-25 47 views
1

我正在使用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); 
    } 
} 

謝謝。

回答

0

當需要擴展實體框架類功能時,我通常採用的路徑是直接從數據庫生成數據模型,並使用Extension Methods

我知道這是不夠的,你不能用這種方式創建屬性。然而,恐怕這可能是你能得到的最好的。

相關問題