2012-11-28 32 views
1

我們正在使用EF Code First開發一個使用ASP.NET MVC4和Web Api + Ko + Breeze的單頁應用程序。在breezejs中處理引用

我們(簡體)的數據模型看起來像這樣

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,結合作品。

問題:我如何使默認配置工作?或者如果我切換到PreserveReferencesHandling.Bone for Breeze什麼是陷阱/缺點?

謝謝!

+0

你能澄清你的模型?這對我來說可能太簡單了。如果'DefaultImage'和'ImageSets'是nav屬性,那麼外鍵是什麼?沒有一個班有鑰匙。是否有圖像表與「Image」類型一起使用?我很努力地理解'ImageCollection'類型是一個Code First類型,ImageSets是如何在EF中作爲'ICollection'的'ICollection'工作的。 也不知道你爲什麼設置JSON序列化選項;使用所有Breeze示例控制器所示的​​Breeze.WebApi.JsonFormatterAttribute有問題嗎? – Ward

+0

對不起沒有回覆或更新此。 Yead,我可能已經簡化了ImageCollection,其上還有一堆其他的「數據屬性」。我們後來發現它爲什麼不起作用。仔細閱讀文檔後,我們意識到Breeze僅支持與模型中顯式外鍵規範的關聯,並且我們使用獨立關聯。爲什麼這個限制已經到位? –

回答

2

通常,您不希望將PreserveReferencesHandling切換爲無,因爲您將失去序列化循環引用的能力,並且您的有效負載將變得更大。

我真的不明白爲什麼你的綁定在設置後會開始工作。理解這個的第一步可能是在查詢後檢查ko對象實際上是否包含正確的數據。

請記住微風導航屬性是延遲加載的,所以您可能沒有用最初的查詢加載它們。看看「EntityAspect.loadNavigationProperty」方法。