假设我有两个实体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