1

我们正在使用 ASP.NET MVC4 和 Web Api + Ko + Breeze 使用 EF Code First 开发单页应用程序。

我们的(简化的)数据模型如下所示

class Product {
    public String Name { get; set; }
    public ICollection<ImageCollection> ImageSets { get; set;}
    public Image DefaultImage { get; set; }
}

class ImageCollection {
    public ICollection<Image> Images { get; set; }
}

class Image {
    public String ImageUrl { get; set; }
}

DefaultImage 是一个导航属性(带有外键)并且是 ImageSets 中的图像之一。

我们公开了 Products() 的 Web API 方法和默认的 Breeze 配置。线路上的 JSON 序列化输出具有对象引用(即 PreserveReferencesHandling.Object),因此当我想绑定 ImageUrl 时,ko 无法解析该值。

html看起来像这样

 <img data-bind="attr: { src: DefaultImage().ImageUrl, title: Name}" />

当我将序列化程序切换为 PreserveReferencesHandling.None 时,绑定有效。

问题:如何使默认配置起作用?或者如果我为 Breeze 切换到 PreserveReferencesHandling.None 有什么陷阱/缺点?

谢谢!

4

1 回答 1

2

通常,您不希望将 PreserveReferencesHandling 切换为 None,因为您将失去序列化循环引用的能力,并且您的有效负载会变得更大。

我实际上不明白为什么您的绑定在设置后会开始工作。理解这一点的第一步可能是在查询后检查 ko 对象是否实际包含正确的数据。

请记住,微风导航属性是延迟加载的,因此您可能没有在初始查询中加载它们。看一下“EntityAspect.loadNavigationProperty”方法。

于 2012-11-28T17:20:33.023 回答