4

我正在尋找一個體面的模式的下拉列表選擇和POCO EF請選擇持久性的建議。在ASP.NET MVC解決方案中使用實體框架保存下拉列表選擇

我在我的視圖模型中有一個IEnumerable<Country>的列表,其中Country是通過EF加載的POCO。視圖模型上有一個Address屬性,該屬性在Country屬性上獲取當前或用戶選定的值。使用默認的模型綁定器提供我與填充Address.Country視圖模型

Html.DropDownListFor(model => model.Address.Country.Id, new SelectList(Model.Countries,"Id","Name",model.Address.Country.Id) 

到目前爲止好,這一切的回傳作品:在視圖裏我通過Html.DropdownListFor(顯示這些)這樣。然而,Address.Country當然只填充了默認模型綁定的Id字段。

試圖通過EF發送地址更新回數據庫爆炸,因爲這被視爲一個新的對象,沒有它的全部對象圖加載,只有Id集。

現在我可以通過從數據庫中將完整的Country對象加載到Address.Country屬性上,然後在基於所選ID進行保存之前解決此問題。但是,除了簡單的對象圖之外,對於任何事情來說,這看起來都很困難。

我能想到的最「優雅」的解決方案是國家的自定義模型綁定器,但是那樣會要求模型綁定器知道用於檢索完全EF對象的存儲庫,這對我來說看起來並不正確。我還必須對下拉列表中使用的所有其他實體重複此操作。

希望這是有道理的,任何有關其他人如何做這個反饋意見。

+0

我知道這是舊的,但有沒有人得到這個解決方案,而不必聲明CountryID以及Country屬性? – 2012-12-28 01:06:20

回答

0

如果將Address.Country設置爲對象,EF期望它是一個完整的對象,它是當前上下文的一部分,但EF確實可以識別外鍵:如果Address對象同時包含CountryID屬性和Country屬性,它應該接受Address.CountryID被設置,只要Address.Country本身爲null。

0

您的地址類中聲明的國家作爲虛擬

public class Address 
{ 
    public virtual Country Country; 
} 

試試這個,讓我知道,如果它的工作原理,虛擬支持惰性加載,你不必專門查詢

相關問題