实体框架删除对象-并发错误(如何禁用并发)



是否有一种方法可以禁用EntityFramework中抛出的并发错误?

例如:

using (xEntities5 entities = new xEntities5())
            {
                entities.Domains.MergeOption = System.Data.Objects.MergeOption.NoTracking;
                Domain domain = new Domain() { DomainId = id };
                EntityKey key = entities.CreateEntityKey(entities.CreateObjectSet<Domain>().EntitySet.Name, domain);
                domain.EntityKey = key;
                entities.Attach(domain);
                //entities.AttachTo(entities.CreateObjectSet<Domain>().EntitySet.Name, domain);
                entities.DeleteObject(domain);
                return entities.SaveChanges(); // returns affected rows... must catch error?
            }

是否有一种方法,不必做尝试/捕获周围SaveChanges,以检测是否没有被删除?

据我所知,您无法关闭并发错误。并发性错误基于受影响的行数,因此,如果您想删除一行,而它没有被删除(例如,因为它不再存在),则会触发并发性异常。此外,SaveChanges在事务中工作,所以如果你想删除5行,只有4行被删除,异常被触发,所有删除被回滚。

如果您使用标记为ConcurrencyMode.Fixed的列,则并发性测试可能更具限制性。这些列用于SQL语句的条件,因此只能处理未修改的数据库记录。

一旦你得到并发性异常,你应该解决它

SaveChanges()将抛出异常并且不会在内部捕获它们,因此如果您想继续执行,则必须使用try/catch。SaveChanges()还返回一个方法,其中包含提交给数据库的实体数量,即,如果没有发生错误:-)

HTH .

相关内容

  • 没有找到相关文章

最新更新