我使用实体框架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
似乎一切正常。并且它生成了非常好的查询。
我找不到异常原因。我在stakoverflow上看到了常见的错误。但是每一个孤立对我都不起作用。
修改
当我评论两个子实体(哪个实体不重要)时,每种想法都可以正常工作