Breeze .js : adding an element to a navigation property collection without inverse rel raises an exception [Unable to get value of the property 'name' ]

标签 breeze

我的 EDM 中有两个实体,ApplicationAddress 非常类似于以下内容:

class Application
{
    ICollection<Address> Addresses { get; set; }
}

class Address { }

在客户端,我为每个实例创建了一个实例,并尝试将 address 实例添加到 Application.addresses 集合中:

var address = addressType.createEntity(...);
var application = applicationType.createEntity(...);

application.addresses.push(address);

不幸的是,我收到运行时异常:“无法获取属性‘name’的值:对象为 null 或未定义”。

我将异常追溯到 breeze.debug.js@9393-9404 (v1.2.8) 中的 checkForDups 函数:

function checkForDups(relationArray, adds) {
    // don't allow dups in this array. - also prevents recursion 
    var inverseProp = relationArray.navigationProperty.inverse;
    var goodAdds = adds.filter(function(a) {
        if (relationArray._addsInProcess.indexOf(a) >= 0) {
            return false;
        }
        var inverseValue = a.getProperty(inverseProp.name);
        return inverseValue != relationArray.parentEntity;
    });
    return goodAdds;
}

碰巧,我的实体处于一对多的单向关系中(没有反向导航属性);结果在运行时 relationArray.navigationProperty.inverseundefined,因此在尝试访问 name 属性时出现错误。

添加一个简单的检查解决了问题,并允许添加到集合中:

if (!inverseProp) {
    return true;
}

所以毕竟问题是:这是一个错误还是仅仅是 Breeze 不支持一对多单向?

最佳答案

编辑从现在可用的 v Breeze 1.3.5(2013 年 6 月 4 日)开始,此问题已得到修复。


编辑:好的,这是一个错误,但我无法修复当前版本。我将尝试在下一个版本中获取它。

您建议的修复是个好主意,但实际上只是隐藏了问题。

真正的问题是,对于我们在 1->n 方向(即不在 n->1 方向)的单向导航,breeze 没有足够的元数据。因此,导航集合中的重复实体检查将不起作用,子项到父项的自动连接也将丢失。

在我们得到修复之前,最简单的解决方法是简单地使其成为双向导航。请注意,另一个方向的单向导航效果很好。


这可能是一个错误

我们的 DocCode 示例项目中确实有一个在 OrderDetails 和 Products 之间进行单向导航的示例。但在这种情况下,我们允许从 OrderDetail -> Product (1-1) 导航,但不允许从 Product -> OrderDetails (1-n) 导航。

您的情况似乎相反,即允许 1-n 但不允许相应的 1-1。我将创建一些测试,如果我可以重现,它将在下一个版本中修复。

发生这种情况时,我会发回这里。 (感谢找到它:)

关于 Breeze .js : adding an element to a navigation property collection without inverse rel raises an exception [Unable to get value of the property 'name' ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15909589/

相关文章:

entity-framework - Breeze Expand 无法在带有 EF 的 WebAPI 上工作

asp.net-web-api - 使枚举显示在客户端

entity-framework-5 - 带有存储库的 Breeze

Breeze :getEntityGraph 中出现意外错误

c# - 使用 POCO 和 ObjectCotext 来自 EFcontextprovider 的自定义元数据

asp.net - Asp.Net Mvc 中动态数据的替代方案

javascript - 面向纯前端/UI 开发人员的 BreezeJs

angularjs - 是否有任何 AngularJS + ASP.NET-WebApi + OData + Breeze.js + Typescript 示例或是否有人尝试将它们结合起来

c# - 删除实体时,Breeze SaveChanges 总是抛出 DbUpdateConcurrencyException

javascript - Breeze.js - 尝试使用 "any"运算符时出错 - 错误 : Unable to get value of the property 'isAnonymous' : object is null or undefined