在ADO.NET中,ExecuteNonQuery()“对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数”(http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx)
在EF v1中,context.SaveChanges()方法返回“调用SaveChanges时处于已添加,已修改或已删除状态的对象数”。 (http://msdn.microsoft.com/en-us/library/bb739065.aspx)
请告诉我,当多个实体(或单个实体)被添加或更新到context和context.SaveChanges()方法时,如何检查实际的INSERT或UPDATE是否成功。
我们可以假设INSERT(s)或UPDATE(s)成功没有异常吗?
谢谢
答案 0 :(得分:13)
是的,如果没有异常,您可以认为语句已成功执行。
答案 1 :(得分:2)
也许这不是问题的直接答案,但可能有所帮助。 默认情况下,调用SaveChanges方法时,所有命令都封装在一个DbTransaction中(Julia Lerman, Programming Entity Framework)。因此,或者所有命令都将成功执行,或者两者都不成功。这是了解插入,更新或删除是否成功的一种方法。
答案 2 :(得分:0)
在EntityFramework中,SaveChangesAsync()
返回 int 。
因此,您可以检查它是> 0
还是不是。
如果SaveChangesAsync()
发生问题,它将返回受影响的行数,这意味着if value > 0
然后 true 。简而言之,您可以在以下场景中使用
插入
public Task<bool> CreateEntity(Entity entity){
if(entity == null)
return false;
await _dataContext.Entities.AddAsync(entity);
var created = await _dataContext.SaveChangesAsync();
return created > 0;
}
更新
public async Task<bool> UpdateEntity(Entity entityToUpdate)
{
if(entityToUpdate == null)
return false;
_dataContext.Posts.Update(entityToUpdate);
var updated = await _dataContext.SaveChangesAsync();
return updated > 0;
}
删除
public async Task<bool> DeleteEntity(int entityId)
{
var entity = await _dataContext.Entities.FindAsync(entityId);
if (entity == null)
return false;
_dataContext.Entities.Remove(entity);
var deleted = await _dataContext.SaveChangesAsync();
return deleted > 0;
}
在您的方法中,现在您可以简单地检查该更改是否成功:
对于简单的 MVC 场景:
public Task<IActionResult> CreateEntity(EntityModel model)
{
if(model == null)
return StatusCode(404);
var entity = new Entity
{
attribute1 = model.attribute1,
attribute2 = model.attribute3
};
var isCreated = await _entityService.CreateEntity(entity);
if(isCreated)
{
//do something and return a view.
}
else
{
//you can return a status code, or an error view.
}
}
您可以对更新和删除
执行相同的操作