У меня есть LINQ запрос, который возвращает один объект - контекст является ObjectContext не DbContextEntity Framework контекст объекта Обновить
var q = from c in context.x //this has various includes but this just an example
where c.Id == xId
select c;
X x = q.FirstOrDefault();
Я тогда прикрепление коллекции этого с помощью следующей
ObjectQuery<Z> y = x.Y.CreateSourceQuery().Include("1").Include("2");
x.Y.Attach(y);
Однако есть проблема, когда я пытаюсь обновить загруженный объект и если какие-либо элементы, прикрепленные в исходном запросе, были удалены, они не изменяются при обновлении. Я считаю, что это потому, что контекст загружает только один объект один раз и сохраняет его в кеше , однако мне нужно держать contex t, поскольку мне нужно сохранить обратно в базу данных.
Я попытался обновить, используя следующие:
context.Refresh(RefreshMode.StoreWins, y);
или запуская инициирующее освежать, установив состояние сущности на изменения:
context.ObjectStateManager.ChangeObjectState(pb, EntityState.Modified);
Я понимаю, что с контекстом DB вы можете обновите объект, заставляющий обновление базы данных, мой вопрос заключается в том, можно ли принудительно обновить с помощью ObjectContext.
Используя DbContext, мы смогли получить желаемые результаты, освежив все, но, как вы можете себе представить, это было очень медленно.
var refreshableObjects = context.ChangeTracker.Entries().Select(e => e.Entity).ToList();
foreach (var obj in refreshableObjects)
{
((IObjectContextAdapter)context).ObjectContext.ObjectStateManager.GetRelationshipManager(obj).GetAllRelatedEnds().Where(r => r.IsLoaded).ToList().ForEach(c => c.Load());
}
Вы пробовали это? 'context.Entry (y) .Reload();' – lokusking
objectcontext не имеет метода записи http://stackoverflow.com/questions/11032683/objectcontext-does-not-contain-a-definition-for-entry-and -no-extension-metho – Chris
Вы правы. Я смотрю через пару часов, когда у меня есть доступ к моему EF-проекту. – lokusking