使用實體框架時,有有效的方法來實現更新行的邏輯(如果存在)存在或插入新行。
已附加物件
如果處理附加物件(從目前上下文實例載入的物件),請使用下列方法:
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中文網其他相關文章!