Breeze.js:在没有反向rel的情况下向导航属性集合添加元素会引发异常[无法获取属性的值';name';]
我的EDM中有两个实体,Breeze.js:在没有反向rel的情况下向导航属性集合添加元素会引发异常[无法获取属性的值';name';],breeze,Breeze,我的EDM中有两个实体,应用程序和地址非常类似于以下内容: class Application { ICollection<Address> Addresses { get; set; } } class Address { } 不幸的是,我得到一个运行时异常,它说:“无法获取属性“name”的值:对象为null或未定义”” 我将异常追溯到breeze.debug中的checkForDups函数。js@9393-9404(v1.2.8): 碰巧,我的实体处于一对多单向关系
应用程序
和地址
非常类似于以下内容:
class Application
{
ICollection<Address> Addresses { get; set; }
}
class Address { }
不幸的是,我得到一个运行时异常,它说:“无法获取属性“name”的值:对象为null或未定义”
”
我将异常追溯到breeze.debug中的checkForDups
函数。js@9393-9404(v1.2.8):
碰巧,我的实体处于一对多单向关系中(没有反向导航属性);因此,运行时relationArray.navigationProperty.inverse
是未定义的
,因此尝试访问名称
属性时出错
添加一个简单的检查可修复此问题,并允许添加到集合中:
var address = addressType.createEntity(...);
var application = applicationType.createEntity(...);
application.addresses.push(address);
if (!inverseProp) {
return true;
}
因此,在所有这些之后,问题是:这是一个bug还是仅仅是因为Breeze不支持一对多单向?编辑从Vbreeze 1.3.5开始(2013年6月4日),这一问题已经解决
编辑:好的,这是一个bug,但我无法获得当前版本的修复。我将尝试在以下版本中获得它
您建议的修复是一个好主意,实际上只是隐藏了问题
真正的问题是breeze没有足够的元数据,无法在1->n方向(即不是n->1方向)进行单向导航。因此,导航集合中的重复实体检查将不起作用,并且子项与父项的自动连接也将丢失
在我们得到修复之前,最简单的解决方法就是简单地使其成为双向导航。请注意,在另一个方向的单向导航效果很好
这可能是一个bug
在DocCode示例项目中,我们有一个在OrderDetails和产品之间进行单向导航的示例。但在这种情况下,我们允许从OrderDetail->Product(1-1)导航,但不允许从Product->OrderDetails(1-n)导航
您的情况似乎相反,即允许1-n,但不允许相应的1-1。我将创建一些测试,如果我可以重新编程,它将在下一版本中修复
发生这种情况时,我会发回这里。(和找到它的thx:)这个问题解决了吗?如果是,什么时候?在1.4.13中,我似乎也遇到了同样的问题,我还向我的集合中添加了invForeignKeyNames属性,现在我得到了一个“非标度导航属性为只读”错误。。。这些示例都显示将新实体推送到集合导航属性上???抱歉,我无法重新处理您的问题。我将问题隔离为具有嵌套的一对多关系,其中子对象没有返回到父对象的多对一关系。
if (!inverseProp) {
return true;
}