首頁 >後端開發 >C++ >如何在實體框架中有效率地更新或插入行?

如何在實體框架中有效率地更新或插入行?

Patricia Arquette
Patricia Arquette原創
2025-01-06 18:28:45940瀏覽

How to Efficiently Update or Insert Rows in Entity Framework?

更新行(如果存在),否則使用實體框架插入邏輯

使用實體框架時,有有效的方法來實現更新行的邏輯(如果存在)存在或插入新行。

已附加物件

如果處理附加物件(從目前上下文實例載入的物件),請使用下列方法:

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

context.SaveChanges();

物件將自動追蹤更改,並且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();

此方法從資料庫中取得與物件鍵相符的行,並執行基於附件或新增的操作關於查詢的結果。

以上是如何在實體框架中有效率地更新或插入行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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