解决System.Data.Entity.Infrastructure.DbUpdateConcurrencyException:“存储区更新、插入或删除语句影响到了意外的行数(0)

EF在更新或保存数据时出现System.Data.Entity.Infrastructure.DbUpdateConcurrencyException:“存储区更新、插入或删除语句影响到了意外的行数(0)异常:

EF在更新或保存数据时出现这种错误一般是前台往后台发送AJAX序列化的格式不正确或者后台在添加或者更改的实体类数据之中存在空值现象。比如说当你网数据库中更新一条数据时其中你所更新的这条数据的一个属性值为null那么在保存的时候就会出现这种错误。

上面的情况是我遇到的,不过我度娘的时候也看到过人家遇到的其他情况:

1,数据并发情况下,多人客户端对同一条数据同时操作,如果是先delete,再update,那么,一定是会出现以上错误,反之,如果是先update再delete,完全不成问题,详见。。。。走马观花的博客 搜索标题中的异常信息。

2,对于模型中,创建了并发标识字段,timestamp,此时,进行数据编辑的时候,一定要注意,页面上一定要带上该字段值。否则必然出现以上错误,原因很简单,如果不带上这个标识,更新数据 上下文中会检索并发标识,此时找不到相应实体信息的并发标识,可以理解……可以说提升到了并发的高度了吧,找不到同条数据,问题便会出现。

那么解决方法就有了,view中添加标识的隐藏字段即可,在编辑的时候将原数据的标识绑定上,后台提交数据时,重新赋值到实体。即可提交成功。

第二种情况详见:https://www.cnblogs.com/Tmc-Blog/p/4954153.html

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
System.InvalidOperationException: The LINQ expression 'DbSet<z_tjdj_yydj>() .Where(z => z.YYBH.Substring( startIndex: 0, length: z.YYBH.Length - 6) == __Substring_0) .Max(z => int.Parse(z.YYBH.Substring( startIndex: 10, length: 5)))' could not be translated. Additional information: Translation of method 'int.Parse' failed. If this method can be mapped to your custom function, see https://go.microsoft.com/fwlink/?linkid=2132413 for more information. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information. at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.<VisitMethodCall>g__CheckTranslated|15_0(ShapedQueryExpression translated, <>c__DisplayClass15_0& ) at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query) at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass9_0`1.<Execute>b__0() at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.Max[TSource,TResult](IQueryable`1 source, Expression`1 selector) at VOL.TJYY.Services.z_tjdj_yydjService.<>c__DisplayClass10_0.<Import1>b__0(List`1 list) at VOL.Core.BaseProvider.ServiceBase`2.Import(List`1 files) in D:\work\TJYYHT_VOL\Net6版本\VOL.Core\BaseProvider\ServiceBase.cs:line 459 at VOL.TJYY.Services.z_tjdj_yydjService.Import(List`1 files) at VOL.TJYY.Services.z_tjdj_yydjService.Import1(List`1 fileInput, Dictionary`2 data) at VOL.TJYY.Controllers.z_tjdj_yydjController.Import1(List`1 fileInput, Dictionary`2 data) at lambda_method901(Closure , Object , Object[] ) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
06-10
您好!对于 EF 更新删除操作时出现的错误“存储更新插入删除语句影响到了意外行数(0)。实体在加载后可能被修改或删除”,可能有以下几种可能的原因和解决方法: 1. 实体已被其他操作修改或删除:在执行更新删除操作之前,可能其他地方已经修改或删除了该实体。您可以在执行操作之前,先重新加载实体以确保它是最新的数据,并且没有被其他操作修改或删除。可以使用 `DbContext.Entry(entity).Reload()` 方法重新加载实体。 2. 实体的状态未正确设置:在执行更新删除操作之前,确保实体的状态正确设置。如果实体是从数据库中查询出来的,那么它的状态应该是已附加(`EntityState.Unchanged`);如果是新创建的实体,那么应该是已添加(`EntityState.Added`)。可以使用 `DbContext.Entry(entity).State` 属性来设置实体的状态。 3. 数据库模型与实体类不一致:如果数据库模型与实体类定义不一致,可能会导致更新删除操作失败。请确保数据库模型和实体类的字段、关联关系等定义是一致的。 4. 数据库约束限制:更新删除操作可能违反了数据库约束限制,例如外键约束、唯一性约束等。请检查数据库约束,并确保操作不会违反这些约束。 5. 其他并发操作导致的冲突:如果多个用户同时对同一实体进行操作,可能会导致并发冲突。您可以考虑使用乐观并发控制机制,例如使用版本号或时间戳列来检测并发冲突,并处理冲突情况。 希望以上解答对您有帮助!如果问题仍然存在,请提供更多的上下文信息,以便更好地帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值