首頁 >後端開發 >C++ >如何使用實體架構實作Upsert邏輯?

如何使用實體架構實作Upsert邏輯?

Barbara Streisand
Barbara Streisand原創
2025-01-06 18:48:40669瀏覽

How to Implement Upsert Logic Using 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();

具有未知密鑰的非附加物件:

如果金鑰未知,可以執行查找查詢來決定是否存在:

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();

以上是如何使用實體架構實作Upsert邏輯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn