题
我在一个客户端和服务器端使用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);
. 不隶属于 StackOverflow