2014-01-21 62 views
0

我一直在使用Entity Framework Code First遷移一段時間,並且喜歡認爲我很瞭解基礎知識。但是,昨天我遇到了一個很奇怪的問題,我似乎找不到解決辦法。實體框架 - 添加遷移爲外部程序集創建實體

我已經添加了一個DLL的引用(第三方 - 我自己沒有開發),它有我需要在我的實體上的一些接口。該DLL包含一些其他的東西 - 比如一些類 - 我們不需要和不使用。

現在引用並實現一些接口 - 當我使用Add-Migration命令添加一個遷移時,Entity Framework似乎挑選了DLL中的一些類,並嘗試爲它們創建表遷移。

例如,我在我的項目中有一個「用戶」實體。我添加了對ThirdParty.dll的引用,其中包含一個IThirdPartyUser接口。該DLL還包含我沒有使用的UnusedClass,- 它不是以任何方式的我的上下文的一部分。

當我創建一個遷移時,我得到代碼來爲UnusedClass創建數據庫表。例如:

  CreateTable(
      "dbo.UnusedClass", 
      c => new 
       { 
        Id = c.Int(nullable: false, identity: true), 
        RegistrationNumber = c.Int(), 
       }) 

現在,我的理論是,這個外部組件(不正確地)對實體框架一些依賴 - 但我想不出爲什麼遷移嘗試生成數據庫代碼的方式 - 特別是,因爲他們不屬於我的背景

以前有人遇到過這個嗎?我即將開始嘗試錯誤練習,試圖找到問題的根本。

+0

我想我已經取得了一些進展。一些未使用的類的名稱中帶有「ID」的屬性,我認爲實體框架正在使用其約定作爲實體進行提取。我有模型忽略有問題的類 - 但有什麼辦法排除整個命名空間/ DLL中的類,或者以這種方式關閉約定?不喜歡EF正在查看每個類似於此的每個DLL中的每個類的事實。 – stevehayter

回答

0

EF應該只拾取源自您的DbContext的對象圖中的類 - 因此,如果類A位於您的上下文中,並且類A具有類型爲UnusedClass的屬性,則EF將嘗試對其進行支架。

您可以將NotMappedAttribute添加到屬性或類中,以使EF在生成映射時忽略它。

+0

這就是我的想法 - 但這些類沒有在我的DbContext中定義。這就是爲什麼我確信組裝內部還有其他事情。我沒有源代碼,所以我不能添加NotMappedAttribute(另外還需要在程序集中添加對EF的引用,這看起來有點不對)。我已經使用DbModelBuilder.Ignore <>()來暫時忽略有問題的類。 – stevehayter