實體框架提供了多種方法來管理「更新行(如果存在),否則插入新行」場景。
附加物件:
如果正在修改的實體已附加到上下文,可以直接更新:
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中文網其他相關文章!