我在一个客户端和服务器端使用Breeze。我使用一个Master Manager获取所有静态数据,如挑选列表,ComboBox等。我正在使用另一个经理在我的视图中编辑数据。

我跟着aproach在这里困扰: http://www.breezejs.com/documentation/ multiple-managers#createmultiplanagers

但我有问题。我的问题是如何将Master Manager的信息更改为我的其他管理者?

例如,我有这个模型:

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
.

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

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

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

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

我试图做entitya.entityb= orititiesb [someindex],这给出了以下错误:

错误:无法将实体连接到另一个entityManager中的实体。必须先分离两个实体中的一个。

*答案:

    我手动创建在View Manager中不存在的EntityB(不变),这是作品。我基于来自Master Manager所选EntityB的此新实体。
  • 答案建议吼叫,也有效。

在我的应用程序中,我使用了这两种方法,具体取决于上下文。

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top