数据库操作预计会影响1行,但实际上会影响50(db序列的下一个数字)行

时间:2019-10-22 11:58:52

标签: c# asp.net-core entity-framework-core database-concurrency

我使用实体框架2.2.6。我有AddOrUpdate方法。当客户端尝试对实体进行操作(插入或更新)时,我通过唯一值检查db上是否存在实体,并将旧数据ID值设置为新数据ID值,并将其设置为已更新。如果不存在,则将其设置为插入

public void AddOrUpdate(TEntity entity, Expression<Func<TEntity, bool>> predicate)
        {
            var oldEntity = Get(predicate);
            DetachEntry(oldEntity);

            if (oldEntity != null)
            {
                var idProperty = entity.GetType().GetProperties().First(x => x.Name == "Id");
                idProperty.SetValue(entity, idProperty.GetValue(oldEntity, null));

                Update(entity);
            }
            else
                Add(entity);
        }

当我尝试简单实体时,它工作正常。但是当我使用非常复杂的类型时,会出现以下异常。

  

数据库操作预期会影响1行,但实际上会受到影响   50行。自从实体被删除以来,数据可能已被修改或删除。   已加载。有关详情,请参见http://go.microsoft.com/fwlink/?LinkId=527962   有关了解和处理乐观并发的信息   例外。

我的复杂类型是这样的。

public class FamilyMemberInfo 
    {

        public int Id { get; set; }

        public int AppealId { get; set; }

        public int MemberId { get; set; }

        public FamilyMember FamilyMember { get; set; }

        public Appeal Appeal { get; set; }

        public ICollection<FamilyMemberContact> Contacts { get; set; }

        public ICollection<FamilyMemberCrime> Crimes { get; set; }

        public ICollection<FamilyMemberDisease> Diseases { get; set; }

        public ICollection<FamilyMemberPaymentLiability> PaymentLiabilities { get; set; }


    }

在调用AddOrUpdate方法之后,我看起来ChangeTraker似乎一切正常。并且它生成了非常好的查询。

enter image description here enter image description here enter image description here enter image description here enter image description here

我找不到异常原因。我在stakoverflow上看到了常见的错误。但是每一个孤立对我都不起作用。

修改

当我评论两个子实体(哪个实体不重要)时,每种想法都可以正常工作

0 个答案:

没有答案