2011-08-10 46 views
5

場景:試圖從一個數據庫提取信息並將信息從另一個數據庫重新排列。 DB A有一些我想獲得的數據。我想將它存儲在DB B上,結構稍有不同。使用ObjectContext和DbContext

DB A我使用EDMX數據庫生成的模型,因此它使用了ObjectContext的派生。 DB B我想成爲代碼生成。所以我使用代碼/模型第一種方法,通過包管理器安裝EntityFramework 4.1。所以DB B使用的DbContext衍生

當我試圖從數據庫A到數據庫B檢查的商店信息說:

試驗方法RoutIT.Irma.Import.Service.Test.ImportIrma2ProductTests.ImportProducts拋出異常:系統.ArgumentException:找不到'DB A的EDMX模型中的某個實體'的概念模型類型

實際上,它在向數據庫B的Derived DbContext的DbSet屬性添加DB B實體時執行此操作。因此代碼等

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) 
{ 
      foreach (FirstPVC pvc in pvcs) 
      { 
       this._irmaImport.FirstPVCs.Add(pvc); <-- 
       this._irmaImport.SaveChanges(); 
      } 
      scope.Complete(); 
     } 
} 

它發生在高於標記由箭頭在代碼點(「< - 」)

FirstPVC是DB乙屬性尚未在箭頭的點它抱怨沒有一個屬於數據庫B的上下文的實體的概念模型。

這很奇怪,因爲我嘗試將DB B實體存儲到DB B上下文中。爲什麼它應該關注數據庫A的實體。

所有上下文都包含在同一個項目中。但DB B的Derived DbContext只知道它自己的DbSet屬性,突然嘗試向DbSet添加內容時,它給了我上面粗體的錯誤。

有人知道爲什麼會發生這種情況? DbContext爲什麼要關心另一個上下文的實體,特別是ObjectContext派生類的實體。

Perhapse它有用要注意它的抱怨實體看起來有點像這樣

[EdmEntityTypeAttribute(NamespaceName="Irma2Model", Name="AccessProvider")] 
[Serializable()] 
[DataContractAttribute(IsReference=true)] 
public partial class AccessProvider : EntityObject 
{ 
    /*****...... ******/ 
} 
+1

我想我有同樣的問題,我有兩個DB-first EDMX映射來自同一個DB的不同表,現在我已經將其中一個切換到了較新的EF4.1 DbContext/POCO模型,但是當我嘗試使用後者時,在另一個EDMX中得到關於一個表格丟失模型的錯誤。也許這個答案是相關的?:http://stackoverflow.com/questions/3521497/how-does-ms-entity-framework-map-from-the-conceptual-model-to-clr-types。注意我認爲你的文章中有一個錯字「它抱怨沒有屬於DB B上下文的實體的概念模型」,你的意思是DB A是對的? – zeroid

+1

http://stackoverflow.com/questions/6899567/mixing-model-first-and-code-first這也是。沒有回答,雖然 – zeroid

回答

6

找到了答案,它不是你想,雖然聽到的內容:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/d2a07542-cb33-48ba-86ed-4fdc70fb3f1a

「如果您正在使用EDMX文件的默認代碼生成,然後生成的類包含一系列屬性,以幫助EF查找每個實體類型使用哪個類。EF目前有一個限制,即POCO類無法從屁股中加載包含具有EF屬性的類的embly。 (簡答題是否定的,你的課程需要在不同的項目中)。

這是一個有些人爲的限制和一些我們知道的是痛苦的,並會嘗試在未來刪除。」

因此,解決方法是將這些類分成兩個不同的組件。

+1

謝謝你在這個火上跳。你剛剛救了我幾個小時。無論如何,我想將edmx類分離成單獨的程序集。你不知道在EF的封面下創建了什麼樣的開銷。認真考慮下一輪的nhibernate! – drogon

相關問題