2016-11-21 13 views
1

私は私のプロジェクトでは2つのエンティティがあります。作業単位のリポジトリパターンでナビゲーションプロパティを更新できますか?

public class A 
{ 
    public int Id { get; set; } 
    public DateTime CreatedDateTime { get; set; }  
    public virtual B B { get; set; } 
} 


public class B 
{ 
    public int Id { get; set; } 
    public Nullable<DateTime> LastAliveTime { get; set; }  
    public virtual ICollection<A> A { get; set; } 
} 

私はEntity Frameworkを持つ作業リポジトリパターンのユニットを使用していますが、私は次の操作を行います。

stirng id = "abc"; 
var aService = unitOfWork.GetRepository<A>(); 
var ins = aService.FindBy(a => a.Id == id); 

私はを更新するためにOKであることを知っていますを入力し、dbcontextを保存します。私が知っている必要があり何

は次のとおりです。

ins.B.LastAliveTime = DateTime.UtcNow; 

この作品はいつもウィル?

BエンティティのLastAliveTimeを更新する正しい方法ですか?また、次のような別のリポジトリを初期化する必要がありますか?

var bService = unitOfWork.GetRepository<B>(); 
+0

エンティティタイプごとにリポジトリがあるのはなぜですか? – Evk

+3

''仮想 ''がレイジーローディングを意味すると仮定すると、それは基礎となるコンテキストの存続期間に依存します。コンテキストがまだ生きている場合、 'ins.B'を呼び出すか、または' ins.B'が既に読み込まれている場合、それは動作します。さもなければ、 'InvalidOperationException'を取得し、コンテキストが破棄されたときに' B'をロードしようとします。 – Dennis

答えて

1

あなたはことをする必要はありません。

eager loading(Include(x=>x.B))または遅延ロードを使用する必要があります。それでは、問題はありません。

+0

私は既存のプロジェクトに最小限の修正を加える必要があります。@Dennisが言及したように、今のところ私のコンテキストが削除されていない場合はコードが機能しています。 –

関連する問題