Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用manager.createEntity创建包含navigationproperties的Breeze实体会引发异常_Entity Framework_Asp.net Web Api_Breeze - Fatal编程技术网

Entity framework 使用manager.createEntity创建包含navigationproperties的Breeze实体会引发异常

Entity framework 使用manager.createEntity创建包含navigationproperties的Breeze实体会引发异常,entity-framework,asp.net-web-api,breeze,Entity Framework,Asp.net Web Api,Breeze,情景: 我在SPA中使用breeze进行查询,在POST PUT DELETE方法中使用原始http方法进行查询。 资源上的POST方法返回创建的资源,包括其创建的子对象 我想将此创建的资源附加到beeze实体管理器 我已尝试使用添加实体 manager.createEntity('Driver', data, breeze.EntityState.Unchanged); 其中,数据对象包含驱动程序资源和相关子实体的数组 但有一个例外:“可能未设置集合导航属性。” 我必须手动创建本地实体并附加

情景:

我在SPA中使用breeze进行查询,在POST PUT DELETE方法中使用原始http方法进行查询。 资源上的POST方法返回创建的资源,包括其创建的子对象

我想将此创建的资源附加到beeze实体管理器

我已尝试使用添加实体

manager.createEntity('Driver', data, breeze.EntityState.Unchanged);
其中,数据对象包含驱动程序资源和相关子实体的数组

但有一个例外:“可能未设置集合导航属性。”


我必须手动创建本地实体并附加子实体,还是breeze支持此方案?

出现此异常的原因是“createEntity”方法创建实体,然后将您的“数据”分配给它,但是对于任何集合导航属性,集合已经存在,Breeze不允许您替换它。对于现有实体来说,这是一个经过深思熟虑的选择,因为应用程序的其他部分可能持有对集合的引用,但在这种情况下,如果您是“第一个”访问集合,则这是一个过分的选择。目前,解决办法是更新任何导航集合,而不是替换它们

因此,最简单的方法是在不使用任何集合数据属性的情况下调用createEntity方法,然后将数据推送到集合中

var driver = manager.createEntity('Driver', dataWithoutCollections, EntityState.Unchanged)
// then update collection properties by pushing into them.
trafficFines.forEach(function(trafficFine) {  
   driver.trafficFines.push(trafficFine);      // or use push.apply
};
请注意,添加到实体的集合属性不会导致EntityState更改,因此这应该足够了


基于这个问题,我将添加一个功能请求,以便在调用“createEntity”方法的情况下抑制此异常,因为应用程序的某些其他部分已经可以访问新实体没有危险

此异常的原因是“createEntity”方法创建实体,然后将您的“数据”分配给它,但是对于任何集合导航属性,集合已经存在,Breeze不允许您替换它。对于现有实体来说,这是一个经过深思熟虑的选择,因为应用程序的其他部分可能持有对集合的引用,但在这种情况下,如果您是“第一个”访问集合,则这是一个过分的选择。目前,解决办法是更新任何导航集合,而不是替换它们

因此,最简单的方法是在不使用任何集合数据属性的情况下调用createEntity方法,然后将数据推送到集合中

var driver = manager.createEntity('Driver', dataWithoutCollections, EntityState.Unchanged)
// then update collection properties by pushing into them.
trafficFines.forEach(function(trafficFine) {  
   driver.trafficFines.push(trafficFine);      // or use push.apply
};
请注意,添加到实体的集合属性不会导致EntityState更改,因此这应该足够了

基于这个问题,我将添加一个功能请求,以便在调用“createEntity”方法的情况下抑制此异常,因为应用程序的某些其他部分已经可以访问新实体没有危险