我们正在使用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是一个导航属性(带有外键),是ImageSet中的一个图像。
我们正在公开Products()的Web API方法,并使用默认的Breeze配置。线上的JSON序列化输出具有对象的引用(即PreserveReferencesHandling.Object),因此当我想绑定ImageUrl时,ko无法解析该值。
Html看起来像这样
<img data-bind="attr: { src: DefaultImage().ImageUrl, title: Name}" />
当我切换序列化程序以执行PreserveReferencesHandling.None时,绑定有效。
问题:如何使默认配置生效?或者如果我为Breeze切换到PreserveReferencesHandling.None有什么问题/缺点?
谢谢!
答案 0 :(得分:2)
通常,您不希望将PreserveReferencesHandling切换为None,因为您将无法序列化循环引用,并且您的有效负载将变得更大。
我实际上并不理解为什么绑定会在设置之后开始起作用。理解这一点的第一步可能是在查询后检查ko对象是否实际包含正确的数据。
请记住,breeze导航属性是延迟加载的,因此您可能没有使用初始查询加载它们。看一下“EntityAspect.loadNavigationProperty”方法。