检查实体框架中的插入或更新是否成功

时间:2009-08-25 21:11:15

标签: entity-framework savechanges

在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)成功没有异常吗?

谢谢

3 个答案:

答案 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.
     }
}

您可以对更新和删除

执行相同的操作