Entity framework 使用manager.createEntity创建包含navigationproperties的Breeze实体会引发异常
情景: 我在SPA中使用breeze进行查询,在POST PUT DELETE方法中使用原始http方法进行查询。 资源上的POST方法返回创建的资源,包括其创建的子对象 我想将此创建的资源附加到beeze实体管理器 我已尝试使用添加实体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); 其中,数据对象包含驱动程序资源和相关子实体的数组 但有一个例外:“可能未设置集合导航属性。” 我必须手动创建本地实体并附加
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”方法的情况下抑制此异常,因为应用程序的某些其他部分已经可以访问新实体没有危险