Entity framework 检查实体框架中的插入或更新是否成功
在ADO.NET的ExecuteNonQuery()中,对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数“() 在EFV1中,context.SaveChanges()方法返回“调用SaveChanges时处于添加、修改或删除状态的对象数。”() 请告诉我们,当多个实体(或单个实体)被添加或更新到上下文和context.SaveChanges()方法时,如何检查实际插入或更新是否成功 如果没有例外,我们是否可以假定插入或更新成功?Entity framework 检查实体框架中的插入或更新是否成功,entity-framework,savechanges,Entity Framework,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中所做的,当我想知道是否更新或插入了某些内容时。很高兴看到我不是唯一的一个。