假設我有兩個實體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();
}
這裏的問題是,當我在_context
從EntityTable
刪除E1
,即不會立即反映到我保存。因此,操作將失敗,因爲E1仍然存在,插入E2
不成功。有沒有解決這個問題,EntityTable
確實反映了所做的更改?
爲什麼你不把獨特的條件留給SQL而不檢查代碼? –
在您查詢是否存在以及您對SaveChanges()的調用之間,還可以通過另一個進程或線程插入。不要在代碼中這樣做。 – CodeCaster
刪除>保存>插入>保存..大聲笑 – niksofteng