Расширенная структура сущности генерирует исключение DynamicProxy

При попытке сделать массовые обновления с помощью 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 query) + 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.

EntityFramework.Extended.dll! EntityFramework.Mapping.ReflectionMappingProvider.CreateEntityMap (System.Data.Entity.Core.Objects.ObjectQuery query) + 0x401 байт

EntityFramework.Extended.dll!EntityFramework.Mapping.ReflectionMappingProvider.GetEntityMap(System.Data.Entity.Core.Objects.ObjectQuery query) + 0x58 байт

EntityFramework.Extended.dll!EntityFramework.Mapping.MappingResolver.GetEntityMap(System.Data.Entity.Core.Objects.ObjectQuery query) + 0x9f байт

EntityFramework.Extended.dll!EntityFramework.Extensions.BatchExtensions.Update(System.Linq.IQueryable source, System.Linq.Expressions.Expression> updateExpression) + 0x1c8 байт

Я попробовал последнюю версию для EF5, и я обновил до EF6, чтобы увидеть, работает ли последняя версия, но у меня та же проблема. Мы используем Code First.

Я не уверен, что делать дальше, я начал пытаться понять, как работает код EntityFramework.Extensions. Но мне интересно, придется ли мне возвращаться к использованию хранимой процедуры или SQL, которые не идеальны для нашей установки.

Кто-нибудь знает, что это за проблемы, или есть идеи о том, как решить, что происходит?

1 ответ

Решение

Оказывается, вы можете игнорировать эту ошибку. У меня была включена опция отладки исключений времени выполнения CLR. Я проследил за исходным кодом, а затем загрузил его и начал отладку.

Похоже, что первоначально генерируется исключение, и оно повторяется с некоторыми другими вариантами. К сожалению, у меня не было времени разобраться с точной проблемой, потому что я столкнулся с другой - но это тема другого вопроса.

Другие вопросы по тегам