Breeze - 多个EF上下文,API控制器 - 在微风上下文中组合并连接它们(查找表)

时间:2013-05-15 12:12:17

标签: breeze

我有2个EntityFramework上下文和相应的API控制器 我有2个Breeze entityManager 我用entityManager1读了一些国家数据 我用entityManager2读了一些公司数据。

现在我用魔杖显示以下列表:
   CompanyName1 CountryName1
   CompanyName2 CountryName2
   等。

在Knockout中,它看起来像这样:

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

这可能吗?我试过了:
- 使用entityManager1上的exportEntities / entityManager2上的importEntities
- 向entityManager2添加了第二个dataService,因此可以使用entityManager1的相同元数据

没有运气这样的票价 有没有办法解决这个问题? 有没有办法将来自一个entityManager的数据与其他一个实体结合起来? 有没有办法在两个不同的metadataStores entites之间设置外键关系?

谢谢,干杯哈利

2 个答案:

答案 0 :(得分:1)

我打赌你希望能够从一个模型中定义的实体导航到另一个模型中定义的实体。这是对的吗?

如果是这样,那将无效......不是“开箱即用”。 Breeze EntityManager允许来自不同模型的实体共存于缓存中。但它无法弥补不同模型实体之间的导航。

例如,假设Company#1中的DbContextCountry#2中的DbContext已定义,您已安排了两个不同的元数据来源,一个来自DBC# 1(例如,new EFContextProvider<DBC1>().Metadata)和来自DBC#2的一个(例如,new EFContextProvider<DBC2>().Metadata)。

您将无法编写aCompany.Country()并从模型#2获取Country实例。不在服务器上的Entity Framework中。不是在Breeze客户端上(没有一点聪明)。原因很简单:CompanyCountry在不同的模型模式中定义。它们可能完全位于不同服务器上的不同数据库中,采用完全不同的技术。

现在,您可以组建自己的客户端Company媒体资源,为您导航至Country。那是你想要做的吗?

  

FWIW,即使在同一模型架构中定义了实体,也无法从一个管理器中的实体导航到另一个管理器中的实体。 EntityManagers严格相互隔离。如果CompanyCountry在同一架构中定义,并且出于某种原因,您在一位经理中有Company而在另一位经理中有相关Country,那么您将会如果要在实例之间导航,则必须将一个或另一个(例如,Country导入Company的管理器)。为了清楚起见,我这样说。我认为这不是问题,因为你说你尝试导入实体并且它不起作用。

让我们退后一步。你想做什么?为什么这些实体在不同的DbContexts

中定义

答案 1 :(得分:0)

从一个EntityManager导出实体并将它们导入另一个实体管理器应该有效。问题是什么?