2

当尝试使用 EntityFramework.Extended 进行批量更新时,我得到了两个例外之一。

看看我试过 的例子:

context.ProcessJobs.Where(job => true).Update(job => new ProcessJob
{
    Status = ProcessJobStatus.Processing,
    StatusTime = DateTime.Now,
    LogString = "Processing"
});

我得到以下异常:

“EntityFramework.Reflection.DynamicProxy”不包含“InternalQuery”的定义

...

System.Core.dll!System.Dynamic.UpdateDelegates.UpdateAndExecute1(System.Runtime.CompilerServices.CallSite 站点,对象 arg0) + 0x153 字节

EntityFramework.Extended.dll!EntityFramework.Extensions.ObjectQueryExtensions.ToObjectQuery(System.Linq.IQueryable 查询) + 0x2db 字节

EntityFramework.Extended.dll!EntityFramework.Extensions.BatchExtensions.Update(System.Linq.IQueryable source, System.Linq.Expressions.Expression> updateExpression) + 0xe9 字节

EntityFramework.Extended.dll!EntityFramework.Extensions.BatchExtensions.Update(System.Linq.IQueryable source, System.Linq.Expressions.Expression> updateExpression) + 0xe9 字节

基于github问题,我尝试了:

var c = ((IObjectContextAdapter) context).ObjectContext.CreateObjectSet<ProcessJob>();
c.Update(job => new ProcessJob
{
    Status = ProcessJobStatus.Processing,
    StatusTime = DateTime.Now,
    LogString = "Processing"
});

导致异常(可能与此处报告的错误相同)

“EntityFramework.Reflection.DynamicProxy”不包含“EnsureMetadata”的定义

...

EntityFramework.Extended.dll!EntityFramework.Mapping.ReflectionMappingProvider.FindMappingFragment(System.Collections.Generic.IEnumerable itemCollection, System.Data.Entity.Core.Metadata.Edm.EntitySet entitySet) + 0xc1e 字节

EntityFramework.Extended.dll!EntityFramework.Mapping.ReflectionMappingProvider.CreateEntityMap(System.Data.Entity.Core.Objects.ObjectQuery 查询) + 0x401 字节

EntityFramework.Extended.dll!EntityFramework.Mapping.ReflectionMappingProvider.GetEntityMap(System.Data.Entity.Core.Objects.ObjectQuery 查询) + 0x58 字节

EntityFramework.Extended.dll!EntityFramework.Mapping.MappingResolver.GetEntityMap(System.Data.Entity.Core.Objects.ObjectQuery 查询) + 0x9f 字节

EntityFramework.Extended.dll!EntityFramework.Extensions.BatchExtensions.Update(System.Linq.IQueryable source, System.Linq.Expressions.Expression> updateExpression) + 0x1c8 字节

我尝试了 EF5 的最新版本,并升级到 EF6 以查看最新版本是否有效,但我遇到了同样的问题。我们使用代码优先。

我不确定如何继续,我已经开始尝试了解 EntityFramework.Extensions 代码是如何工作的。但我想知道我是否必须回退到使用存储过程或 SQL,它们都不适合我们的设置。

有谁知道这些问题是什么,或者对如何解决正在发生的事情有任何想法?

4

1 回答 1

3

事实证明,您可以忽略此错误。我打开了 CLR 运行时异常调试选项。我跟着源代码,然后下载并开始调试。

似乎最初抛出的异常是预期的,并且它使用其他一些选项重试。不幸的是,我没有时间研究确切的问题,因为我遇到了另一个问题——但这是另一个问题的主题。

于 2013-12-04T00:47:14.023 回答