8

在 ADO.NET 中,ExecuteNonQuery()“对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数”(http://msdn.microsoft.com/en-us/library/system。数据.sqlclient.sqlcommand.executenonquery.aspx )

在 EF v1 中,context.SaveChanges() 方法返回“调用 SaveChanges 时处于已添加、已修改或已删除状态的对象的数量”。(http://msdn.microsoft.com/en-us/library/bb739065.aspx

请告知,当将多个实体(或单个实体)添加或更新到上下文并调用 context.SaveChanges() 方法时,如何检查实际的 INSERT 或 UPDATE 是否成功。

我们可以假设 INSERT(s) 或 UPDATE(s) 是否成功?

谢谢你

4

4 回答 4

13

是的,如果没有例外,您可以假设语句执行成功。

于 2009-08-25T22:52:23.530 回答
3

在 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.
     }
}

你可以对更新和删除做同样的练习

于 2019-12-31T14:57:42.870 回答
2

也许这不是问题的直接答案,但可能会有所帮助。默认情况下,当调用 SaveChanges 方法时,所有命令都封装在一个 DbTransaction 中(Julia Lerman,Programming Entity Framework)。因此,或者所有命令都将成功执行,或者都不成功。这是了解插入、更新或删除是否成功的一种方法。

于 2009-08-26T08:14:03.120 回答
-1

定义变量 SaveStatus var SaveStatus=context.SaveChanges()

那么你可以通过获取 SaveStatus=1 的值来知道创建是否已经完成

在“SaveStatus=0”的情况下,这意味着没有记录被创建或影响

于 2021-11-03T12:11:30.623 回答