Breeze.js:在没有反向rel的情况下向导航属性集合添加元素会引发异常[无法获取属性的值';name';]

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): 碰巧,我的实体处于一对多单向关系

我的EDM中有两个实体,
应用程序
地址
非常类似于以下内容:

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;
}