[英]Deleting and Inserting Entity with Entity Framework
假設我有兩個實體E1
和E2
都共享相同的Code
值。 假設我要刪除第一個並插入下一個:
Item.Delete(E1);
Item.Insert(E2);
Item.Save();
哪里
public void Delete(Entity E)
{
var existingEntity = _context.EntityTable.SingleOrDefault(s => s.Code == E.Code);
_context.EntityTable.Remove(existingEntity);
}
public void Insert(Entity E)
{
var existingEntity = _context.EntityTable.FirstOrDefault(s => s.Code == E.Code);
if (existingEntity != null){
throw new ArgumentException("Item alread exists.")
}
var newEntity = CreateDbEntity(E); // Create Db Entity just convert the type. Nothing much here.
_context.EntityTable.Add(newEntity);
}
public void Save()
{
_context.SaveChanges();
}
這里的問題是,當我從EntityTable
中的_context
刪除E1
時,直到保存我的E1
EntityTable
立即反映出來。 因此,該操作將失敗,因為由於E1仍然存在,所以無法成功插入E2
窗台。 是否有解決方法, EntityTable
確實反映了所做的更改?
每次操作后SaveChanges
調用SaveChanges
。
您希望在初始化上下文時進行事務處理(這確保兩個操作都被執行):
_context = new FooEntities();
_transaction = _context.Database.BeginTransaction();
然后,您的Save
方法將提交事務:
_transaction.Commit();
處置上下文和事務不會有什么壞處,但是我相信您已經做到了;)
附帶說明一下,由於您仍然會引發異常:
if (existingEntity != null){
throw new ArgumentException("Item alread exists.")
}
為什么不在“代碼”列上創建唯一約束 ? 這樣數據庫就會拋出異常;)
看來您只是有一個操作順序錯誤,這可能不是最有效的方法,但它應該解決您的問題。
Item.Delete(E1);
Item.Save();
Item.Insert(E2);
Item.Save();
按此順序打電話給他們。
或者,您可以將save方法添加到delete和insert方法中,以便在執行每個方法時保存它,而您只需要使用兩行即可。
public void Delete(Entity E)
{
var existingEntity = _context.EntityTable.SingleOrDefault(s => s.Code == E.Code);
_context.EntityTable.Remove(existingEntity);
Save()
}
public void Insert(Entity E)
{
var existingEntity = _context.EntityTable.FirstOrDefault(s => s.Code == E.Code);
if (existingEntity != null){
throw new ArgumentException("Item alread exists.")
}
var newEntity = CreateDbEntity(E); // Create Db Entity just convert the type. Nothing much here.
_context.EntityTable.Add(newEntity);
Save()
}
public void Save()
{
_context.SaveChanges();
}
然后你可以這樣稱呼它
Item.Delete(E1);
Item.Insert(E2);
希望這可以幫助! 如果沒有讓我知道,我將刪除答案(我必須使用答案,因為我不能評論低於50 rep,否則在回答之前,我會使用評論獲得更多的清晰度)干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.