1. ホーム
  2. c#

[解決済み] Entity FrameworkによるUpdate Row if it Exists Else Insert Logic【終了】。

2022-04-13 18:39:45

質問

<余談
クローズド . この質問は 意見型 . 現在、回答は受け付けておりません。

<パス

この質問を改善したいですか? 事実と引用で答えられるように、質問を更新する。 本論文の編集 .

閉店 7ヶ月前 .

を実装する最も効率的な方法は何でしょうか? 行が存在する場合は更新し、存在しない場合は新規に挿入する。 ロジックは、Entity Frameworkを使用していますか?またはこのための任意のパターンがありますか?

どのように解決するのですか?

アタッチドオブジェクト(コンテキストの同じインスタンスからロードされたオブジェクト)を扱う場合は、単純にこれを使用することができます。

if (context.ObjectStateManager.GetObjectStateEntry(myEntity).State == EntityState.Detached)
{
    context.MyEntities.AddObject(myEntity);
}

// Attached object tracks modifications automatically

context.SaveChanges();

もし、オブジェクトのキーについて何らかの知識が使えるなら、このようなものを使うことができます。

if (myEntity.Id != 0)
{
    context.MyEntities.Attach(myEntity);
    context.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Modified);
}
else
{
    context.MyEntities.AddObject(myEntity);
}

context.SaveChanges();

もし、そのIDからオブジェクトの存在を判断できない場合は、ルックアップクエリを実行する必要があります。

var id = myEntity.Id;
if (context.MyEntities.Any(e => e.Id == id))
{
    context.MyEntities.Attach(myEntity);
    context.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Modified);
}
else
{
    context.MyEntities.AddObject(myEntity);
}

context.SaveChanges();