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

Entity framework 检查实体框架中的插入或更新是否成功,entity-framework,savechanges,Entity Framework,Savechanges,在ADO.NET的ExecuteNonQuery()中,对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数“() 在EFV1中,context.SaveChanges()方法返回“调用SaveChanges时处于添加、修改或删除状态的对象数。”() 请告诉我们,当多个实体(或单个实体)被添加或更新到上下文和context.SaveChanges()方法时,如何检查实际插入或更新是否成功 如果没有例外,我们是否可以假定插入或更新成功? 谢谢您是的,如果没有例外,您可以假设语

在ADO.NET的ExecuteNonQuery()中,对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数“()

在EFV1中,context.SaveChanges()方法返回“调用SaveChanges时处于添加、修改或删除状态的对象数。”()

请告诉我们,当多个实体(或单个实体)被添加或更新到上下文和context.SaveChanges()方法时,如何检查实际插入或更新是否成功

如果没有例外,我们是否可以假定插入或更新成功?


谢谢您

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

这可能不是对问题的直接回答,但可能会有所帮助。
默认情况下,调用SaveChanges方法()时,所有命令都封装在一个DbTransaction中。因此,或者所有命令都将成功执行,或者两者都不成功。这是知道插入、更新或删除是否成功的一种方法。

在EntityFramework中,
saveChangesSync()
返回一个int。 因此,您可以检查它是
>0
还是

如果
savechangessync()
出现问题,它将返回受影响的行数,这意味着
If value>0
为true。简单地说,您可以使用以下场景:

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.
     }
}
插入

public Task<bool> CreateEntity(Entity entity){

    if(entity == null)
            return false;

    await _dataContext.Entities.AddAsync(entity);

    var created = await _dataContext.SaveChangesAsync();

    return created > 0;
}
公共任务创建实体(实体){
if(实体==null)
返回false;
wait_dataContext.Entities.AddAsync(entity);
var created=wait_dataContext.SaveChangesAsync();
创建的返回>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;
}
公共异步任务更新属性(实体实体实体更新)
{
if(entityToUpdate==null)
返回false;
_dataContext.Posts.Update(entityToUpdate);
var updated=wait_dataContext.SaveChangesAsync();
返回更新>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;
}
公共异步任务DeleteEntity(int-entityId)
{
var entity=await\u dataContext.Entities.FindAsync(entityId);
if(实体==null)
返回false;
_dataContext.Entities.Remove(实体);
var deleted=wait_dataContext.SaveChangesAsync();
返回已删除>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.
     }
}
公共任务CreateEntity(EntityModel模型) { if(model==null) 返回状态码(404); var实体=新实体 { attribute1=model.attribute1, attribute2=model.attribute3 }; var isCreated=await _entityService.CreateEntity(entity); 如果(已创建) { //做点什么并返回一个视图。 } 其他的 { //您可以返回状态代码或错误视图。 } }
您可以对更新和删除

执行相同的操作是的,但是如果出现错误,这些方法将引发异常(例如DbUpdateException),因此它们要么总是返回
true
,要么抛出异常。这是一种冗长的说法:当没有抛出异常时,一切都正常。此外,在处理对象图时,为所有CUD操作使用单独的方法并不是很有用。保存对象图可能涉及插入、更新和删除。我宁愿做生意,然后打电话给
SaveChanges
,让EF决定应该做什么。总而言之,我不认为你在这里提出的建议有什么好处。我理解你的观点,但作者只是问我们是否有一种方法可以检查“声明”是“成功”还是“失败”,所以正如我所提到的,这只是实现这一点的一种简单方法。这只是作者在上面给出的示例(ADO.Net)的一个小小转换:
返回值是受命令影响的行数
。他刚刚询问EF中是否有类似的方法,这可能是一种不好的做法,但毕竟,在一天结束时,1大于0。当您说返回true或抛出异常时,您是对的。但若问题是:
请告诉我们,当多个实体(或单个实体)被添加或更新到上下文和context.SaveChanges()方法时,如何检查实际的插入或更新是否成功。
,所以在这种方法中,若一个或多个行实际受到影响,那个么我们可以说——成功。我希望你能理解我在这里的观点。:)这正是我在EF Core中所做的,当我想知道是否更新或插入了某些内容时。很高兴看到我不是唯一的一个。