2013-10-28 91 views
0

我正在使用動態數據與實體框架模型。 如果我在1個EF模型中使用它,那麼這就像一個魅力。動態數據與多個實體框架模型

但現在我需要在我的動態數據項目中使用多個EF模型,並且在註冊過程中收到錯誤。

代碼:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     var model1 = new MetaModel(); 
     model1.RegisterContext(() => 
     { 
      return ((IObjectContextAdapter)new Model1Entities()).ObjectContext; 
     }, new ContextConfiguration() { ScaffoldAllTables = true }); 

     routes.Add(new DynamicDataRoute("model1/{table}/{action}.aspx") 
     { 
      Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), 
      Model = model1 
     }); 


     var model2 = new MetaModel(); 
     model2.RegisterContext(() => 
     { 
      return ((IObjectContextAdapter)new Model2Entities()).ObjectContext; 
     }, new ContextConfiguration() { ScaffoldAllTables = true }); 

     routes.Add(new DynamicDataRoute("model2/{table}/{action}.aspx") 
     { 
      Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), 
      Model = model2 
     }); 
    } 

在運行時我收到時,他的執行model2.RegisterContext錯誤。

錯誤:

Item has already been added. Key in dictionary: 'System.Data.Objects.ObjectContext' Key being added: 'System.Data.Objects.ObjectContext'

所以對於MODEL1他可以註冊上下文但MODEL2他擋在這個錯誤。

如果你知道如何解決這個問題,請指教!

回答

0

我得到了它的2個步驟工作:在我的實體模型去掉「.TT」文件

  • 在您的edmx模型中,將屬性「代碼生成策略」設置爲模型的「默認」。 (並重建您的解決方案)

之後,他接受了多個實體的註冊。

0

Hy湯姆,

我有同樣的問題,因爲超過一個月。我正在調查很多時間,因爲它阻止了我的項目。我在這裏開始了一個論壇條目:

http://forums.asp.net/t/1946475.aspx?Duplicated+key+when+try+to+register+multiple+ObjectContexts+in+Dynamic+Data

它曾在以前的版本。 有一種解決方法(請參閱http://blog.davidebbo.com/2011/01/using-dynamic-data-with-ef-code-first.html),但對當前版本無效。總之,這是一個ASP.Net錯誤。由於我們不能直接調用DbContext(這是可區分的),我們必須調用ObjectContext,並且MetaModel的內部字典使用不帶名稱空間的類型作爲鍵(即總是「ObjectType」),所以沒有辦法繞過它。

幸運的是,ASP.Net團隊現在正在研究它。隨時瞭解上述論壇頁面。

UPDATE 2014年3月:當前版本http://blogs.msdn.com/b/webdev/archive/2014/02/28/announcing-the-release-of-dynamic-data-provider-and-entitydatasource-control-for-entity-framework-6.aspx解決了這個問題。

+0

Stefan,我在這裏也發佈了我的解決方案。希望這會在你身邊! –

+0

Tom,您使用什麼.net框架版本? 有趣的是,它適用於Db首先,我使用Code First。 – StefanG

+0

我正在使用.net 4.5和EF 5.當我嘗試使用時,它無法使用較低的版本。 –