2012-03-05 4 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のパターンになっています。 unitOfWork.VenueRepository.Update(venueDetailsViewModel.Venue);Unchanged状態でオブジェクトグラフを取り付けるのみModifiedとしてvenueを変化させるためである

答えて

1

。一つの選択肢は、VenuePartRepository.Update方法にforeachループを移動することです。

あなたがVenuePartsの要素がUIから追加または削除できるようにする場合は、変更を適用し、ハードの時間を持つことになります。この場合は、データベースにコレクションをロードし、その変更を比較する必要があります。次に、VenuePartの状態をまたはDeletedに手動で変更する必要があります。

+0

合理的ですね。私はそれをリポジトリの中で動かすというあなたの提案を試みます。 – Chris

関連する問題