Расширенная структура сущности генерирует исключение 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. Я проследил за исходным кодом, а затем загрузил его и начал отладку.
Похоже, что первоначально генерируется исключение, и оно повторяется с некоторыми другими вариантами. К сожалению, у меня не было времени разобраться с точной проблемой, потому что я столкнулся с другой - но это тема другого вопроса.