3

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

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

class Address { }

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

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

application.addresses.push(address);

不幸的是,我得到一个运行时异常说:“ Unable to get value of the property 'name': object is null or undefined”。

我将异常跟踪回(v1.2.8)中的checkForDups函数:breeze.debug.js@9393-9404

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 不支持一对多单向?

4

1 回答 1

2

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


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

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

真正的问题是,对于我们在 1->n 方向(即不在 n->1 方向)进行单向导航的情况,微风没有足够的元数据。正因为如此,导航集合中的重复实体检查将不起作用,并且孩子与父母的自动连接也将丢失。

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


这可能是一个错误

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

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

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

于 2013-04-09T20:12:59.283 回答