2013-05-15 33 views
1

我有2個EntityFramework上下文和相應的API控制器。
我有2微風entityManager。
我用entityManager1讀取了一些國家數據。
我用entityManager2讀了一些公司數據。Breeze - 多個EF上下文,API控制器 - 在微風背景下組合並連接它們(查找表)

現在我的魔杖,顯示如下列表:
CompanyName1 COUNTRYNAME1
CompanyName2 CountryName2

在淘汰賽它會是這個樣子:

<table data-bind="foreach: companies"> 
    <tr> 
    <td data-bind="text: name"></td> 
    <td data-bind="text: country().name"></td> <!-- from another entitymanager --> 
    </tr> 
</table> 

這是可能的。我曾嘗試:
- 上entityManager2
使用上entityManager1/importEntities exportEntities - 增加了第二的DataService到entityManager2,所以entityManager1的相同的元數據可以

沒有運氣票價。
有沒有辦法解決這個問題?
有沒有辦法將一個entityManager的數據和另一個entityManager結合起來?
有沒有辦法在兩個不同的metadataStores實體之間設置外鍵關係?

Thankx,乾杯哈利

回答

0

從一個EntityManager的導出實體和它們導入到另一個應該有工作。這個問題是什麼?

1

我敢打賭,你期望能夠從一個模型中定義的實體導航到另一個模型中定義的實體。那是對的嗎?

如果是這樣,那將不起作用...不是「開箱即用」。 Breeze EntityManager允許來自不同模型的實體在緩存中共居。但它不能構成不同模型的實體之間的導航。

例如,假設CompanyDbContext#1和Country定義在DbContext#2和你已經安排了兩個不同的元數據源,一個來自DBC#1(例如,new EFContextProvider<DBC1>().Metadata)和一個從DBC#2(例如, new EFContextProvider<DBC2>().Metadata)。

您將無法編寫aCompany.Country()並從Model#2獲取Country實例。不在服務器上的實體框架中。不在Breeze客戶端(沒有一些聰明)。原因很簡單:CompanyCountry在不同的模型模式中定義。它們很可能位於不同服務器上的不同數據庫中,採用完全不同的技術。

現在,您可以自己組建自己的客戶端Company屬性,以便爲您導航到Country。那是你想要做的嗎?

FWIW,即使實體在相同的模型模式中定義,您也無法從一個管理器中的實體導航到不同管理器中的實體。 EntityManagers嚴格相互隔離。如果CompanyCountry在相同模式中定義,並且由於某種原因,您在一個管理器中有Company,而在另一個管理器中有相關Country,則必須導入一個或另一個(例如,CountryCompany'如果你想在實例之間導航的話。我爲了清晰起見這麼說。我認爲這不是問題,因爲你說你試圖導入實體,它不起作用。

讓我們退後一步。你想做什麼?爲什麼這些實體在不同的DbContexts中定義?