微风 - 多个经理

时间:2014-02-26 15:30:18

标签: breeze

我在一个应用程序中使用breeze用于客户端和服务器端。我使用一个主管理器来获取所有静态数据,如选项列表,组合框等。我正在使用另一个管理器来编辑我的视图中的数据。

我正在追随这里被吮吸的方法: http://www.breezejs.com/documentation/multiple-managers#CreateMultipleManagers

但我有问题。我的问题是如何将主管理器中的信息更改为其他管理员?

例如我有这个模型:

EntityA { Id , description }

EntityB { Id , EntityA(Navigation Property), EntityAId}

我在模型中有这些数据:

EntityA : 
1, 'Description 1' 
2, 'Description 2'
3, 'Description 3'

EntityB
1, EntityA , 1
2, EntityA , 3

在我看来,我有一个实体B列表,当我选择一个项目进行编辑时,我可以更改它的属性。执行此操作后,我想更新显示的列表中的项目。 到目前为止一切都很好,这与非引用对象完美配合,如int,string等... 但是当我尝试在同一项目中更新我的EntityB导航属性时,为了显示正确的描述,如果我的视图管理器不知道该对象,则信息不会更新。

例如,如果我选择编辑上面列表的第一项。

  • 当我设置EntityB.EntityAId = 3.我的视图管理器时,将导航属性更新为正确的EntityA。
  • 当我设置EntityB.EntityAId = 2.我的视图管理器不知道谁是EntityA = 2,因此它不会更新导航属性中的信息,并且视图中显示的描述仍然是原始描述或者在新列表项的情况下为空。

所以我的问题是如何告诉我的视图管理器,显示正确的对象?知道我的主管经理,知道谁是那个对象。

我试图做EntityA.EntityB = EntitiesB [someIndex],这会产生以下错误:

错误:无法将实体附加到另一个EntityManager中的实体。必须首先分离两个实体中的一个。

*答案:

  • 我手动创建了视图管理器中不存在的EntityB(未更改),这是有效的。我将这个新实体建立在Master Manager的选定EntityB上。
  • 答案建议如下,也行得正常。

在我的应用程序中,我根据上下文使用了这两种方法。

1 个答案:

答案 0 :(得分:0)

您可以从一个经理导出实体并将其导入另一个经理。例如

var arrayOfEntities = [ firstEntity, secondEntity, ... ]
var exportedEntities = entityManager1.exportEntities( arrayOfEntities, false);
var importedEntities = entityManager2.importEntities( exportedEntitites);