2012-03-05 77 views
0

我有這個場地對象:子對象是否應該在Entity Framework 4 Code-First中自動更新?

public class Venue 
{ 
    public int Id { get; set; } 

    [Required] 
    [MaxLength(512)] 
    public string Name { get; set; } 

    public string Description { get; set; } 

    [Required] 
    [Display(Name = "Venue Type")] 
    public int VenueTypeId { get; set; } 
    public virtual VenueType VenueType { get; set; } 

    [Required] 
    [Display(Name = "Company")] 
    public int CompanyId { get; set; } 
    public virtual Company Company { get; set; } 

    public virtual ICollection<VenuePart> VenueParts { get; set; } 
} 

正如你所看到的,它有VenuePart個集合。我將Venue發送到視圖,並將VenuePart的集合作爲文本框的表格輸出。這會被回傳至Edit(VenueDetailsViewModel venueDetailsViewModel)。使用調試器,我可以驗證我的更改是否在VenuePart的集合中,所以我認爲我們很擅長綁定。我的控制器試圖更新Venue。它直接在對象上成功執行屬性,例如Name。但是,除非循環訪問集合,否則不會更新這些對象。這是典型的行爲嗎?

unitOfWork.VenueRepository.Update(venueDetailsViewModel.Venue); 
// Should this loop be necessary? 
foreach (var venuePart in venueDetailsViewModel.Venue.VenueParts) 
{ 
    unitOfWork.VenuePartRepository.Update(venuePart); 
} 
unitOfWork.Save(); 

此刻,我甚至擔心列表或東西,從列表中消失了(雖然這就是我下一個攻堅)處理新的東西。對於我的第一步,我只想更新列表。是否有必要遍歷集合並更新每個單獨的對象?如果我不這樣做,他們不會保存。但似乎他們應該沒有我的循環。我的期望是否過高或者我做錯了什麼?

我的repositoryunitOfWork對象在this tutorial之後形成圖案,如果您好奇該代碼的外觀如何。

回答

1

這是因爲unitOfWork.VenueRepository.Update(venueDetailsViewModel.Venue);將在Unchanged狀態附加對象圖並且只將venue更改爲Modified。一個替代方案是將foreach循環移動到VenuePartRepository.Update方法。

如果允許的VenueParts元素從UI添加或刪除你將不得不申請改變很難。如果是這樣的話,你將不得不加載集合中的數據庫和比較,與即將到來的變化。然後手動更改VenuePart各州AddedDeleted

+0

聽起來很合理。我會嘗試將其移入存儲庫中的建議。 – Chris 2012-03-05 07:20:15

相關問題