C# 调用多个SaveChanges()

C# 调用多个SaveChanges(),c#,entity-framework,C#,Entity Framework,我试图在一个数据库表上异步工作,并将更改提交给它,但它不能像我希望的那样工作 这是我的第一个方法,我在对象构造函数上运行一个任务,它不忙着等待集合中的一些新对象并逐个处理它们(从表中删除) 这两种方法都使用相同的UnitOfWork对象和所需的存储库 在我运行应用程序之后,当队列任务正在运行时-当我向第二个方法发送新对象时,我得到以下错误: EntityFramework.dll中发生“System.Data.Entity.Infrastructure.DbUpdateConcurrencyEx

我试图在一个数据库表上异步工作,并将更改提交给它,但它不能像我希望的那样工作

这是我的第一个方法,我在对象构造函数上运行一个任务,它不忙着等待集合中的一些新对象并逐个处理它们(从表中删除)

这两种方法都使用相同的UnitOfWork对象和所需的存储库

在我运行应用程序之后,当队列任务正在运行时-当我向第二个方法发送新对象时,我得到以下错误:

EntityFramework.dll中发生“System.Data.Entity.Infrastructure.DbUpdateConcurrencyException”类型的异常,但未在用户代码中处理。其他信息:Store update、insert或delete语句影响了意外的行数(0)。自加载实体后,实体可能已被修改或删除。刷新ObjectStateManager条目


问题是:如何摆脱这个例外?或者我怎样才能用其他方式来做呢?我已经尝试过新的EF 6.0 BeginTransaction方法,但它对我也不起作用(或者可能我用错了)。

您不应该跨多个线程共享上下文对象。您发布的错误消息实质上是说明上下文对象已被修改


尝试为每个线程使用一个单独的上下文对象:

是否有任何原因不使用本机异步调用?是否在多个线程上使用相同的数据上下文?实际上。。。是的,我在多个线程上使用相同的上下文。这就是我犯这些错误的原因吗?那我该怎么办呢?当我将为两个线程创建上下文并仍然处理添加/删除操作时,但在单独的上下文上,它会工作吗?假设这是一个反问句——我回家后会检查一下。谢谢!
    private static BlockingCollection<QueuedLog> queue = new BlockingCollection<QueuedLog>();

    private void Start()
    {
        Task.Run(() =>
        {
            while (taskQueueActive)
            {
                using (var scope = new TransactionScope())
                {
                    QueuedLog log = queueLogs.Take();

                    // I process it somehow here

                    uow.QueuedLogRepository.Delete(log);

                    if (queueLogs.Count == 0)
                        uow.Save();

                    scope.Complete();
                }
            }
        });
    }
        using (var scope = new TransactionScope())
        {
            uow.MonitoringIdRepository.Add(logs.First(), out id);
            uow.QueuedLogRepository.Add(logs, id);
            uow.Save();

            scope.Complete();
        }