0

linq2sql を使用してエンティティを更新するベスト プラクティスは何かを理解したかっただけですか?

質問をよりよく理解するために、もう少し詳しく説明します。

記事から理解したように、エンティティがコンテキストに関連付けられている場合と、最初から (または既存のエンティティから) エンティティが構築されている場合の 2 つの状況が考えられます。エンティティを更新するメソッドは 1 つだけにしたかったのですが、現時点では次のように実装されています。

 public virtual void Save<T>(T value) where T : class
 {
      Context.GetTable<T>().Attach(value);
      Context.Refresh(RefreshMode.KeepCurrentValues, value);
      Context.SubmitChanges();
 }

もちろん、コードを実行すると:

var orders = GenericRepository.Instance.Find<BuyerOrder>(b => b.ID == 2).FirstOrDefault();
orders.Price = 397809;
GenericRepository.Instance.Save(orders); 

オブジェクトは既にコンテキストにアタッチされており、例外が発生しました:

Cannot attach an entity that already exists.

保存する前に常にオブジェクトをデタッチする必要がありますか? この問題を克服する別の方法はありますか?

質問がばかげている場合は申し訳ありません-これはlinq2sqlの私の最初の経験です

4

2 に答える 2

1

あなたのSave方法では、テーブルを添付しないでください。また、型を取る必要はありませんContext.SubmitChanges。Save メソッド内で呼び出すことができます。何かのようなもの:

public void Save()
{
    Context.SubmitChanges();
}

次に、次のようにします。

var orders = GenericRepository.Instance.Find<BuyerOrder>(b => b.ID == 2).FirstOrDefault();
orders.Price = 397809;
GenericRepository.Instance.Save(); 

その他の例については、MSDN を参照してください: http://msdn.microsoft.com/en-us/library/bb386931.aspx

于 2012-04-13T10:00:50.383 に答える
1

エンティティが次のようにアタッチされているかどうかを確認できます。

if (!Context.GetTable<T>().IsAttached(value))
{
    Context.GetTable<T>().Attach(value);
}
Context.Refresh(RefreshMode.KeepCurrentValues, value);
Context.SubmitChanges();
于 2012-04-13T13:08:08.447 に答える