Entity Framework を使用してレコードを更新しようとしていますが、各プロパティを手動で設定してから変更の保存を呼び出すことは避けたいと考えています。ユーザーがプロパティを変更すると、すべてのプロパティを更新するデータフォームにバインドされたこのクラスのインスタンスがあります。これを使用して私が見ることができる最も良い方法は、コンテキスト内のオブジェクトをデータフォームにバインドされたオブジェクトと同じに設定することですが、これは機能しません。コンテキストからオブジェクトを削除してから、データフォームにバインドされたオブジェクトを追加しようとしましたが、まったく新しいレコードが作成されました (これは予想していましたが、試してみる価値があると判断しました)。レコードが新しい行であるかどうかを検出するために使用される、またはコンテキストオブジェクトをデータバインドされたオブジェクト (同じ pk 値を持つ) に置き換えるという事実を考慮しないために使用されるコンテキスト内に、何らかのタイプのフラグがあると思います。
using (var scope = new TransactionScope())
{
try
{
using (var context = new CIS_DEVEntities())
{
GangMemberBio bio = context.GangMemberBios.First(P => P.id == this.id);
bio = this; //this does not work.
context.SaveChanges();
}
//If the top code is successfully completed then the transaction will be commited
//if not this line will be skipped and execution will be given to the catch block
scope.Complete();
}
catch
{
}
}
アイデアの編集 1 wpf ウィンドウ自体にコンテキスト オブジェクトを作成し、このコンテキストから取得した gangmemberbio オブジェクトにデータフォームをバインドできると考えていました。次に、save changes を呼び出すと、他に何もする必要はありません。メモリ内にデータコンテキストを持つのは悪いと聞きました..それとも、using ステートメントのコンテキスト外で使用すると悪いのでしょうか?