Я работаю в отключенном сценарии, но заметил, что удаление контекста объекта не освобождает прикрепленные объекты. В результате последующие операции часто терпят неудачу из-за этого.Entity framework: отключение, но хранение графа объектов
Так решить эту проблему, я отсоединять все сам, когда контекст объекта расположены:
public void Dispose()
{
// detaching is not really needed, because we have short living object contexts
var objectStateEntries =
_context.UnderlyingContext.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged);
objectStateEntries.ToList().ForEach(o => { if (o.Entity != null)
{
_context.UnderlyingContext.Detach(o.Entity);
}});
_context.Dispose();
_context = null;
}
Однако побочным эффектом является то, что объектный граф получает отдельностоящий полностью, но я действительно хочу, чтобы сохранить график !
Кажется, я не нашел для этого решения, верно ли, что это невозможно?
Можете ли вы объяснить эту проблему лучше, мне кажется, никто из этого не должно быть необходимым. Как возникают «не выпущенные» объекты? –
Ну, предположим, что я создаю сложный объект в отключенном клиенте, отправьте его во внутреннюю часть, которая создает этот объект, используя структуру сущности. Это работает, и обновленный объект отправляется обратно отключенному клиенту. Затем клиент обновляет объект, меняя некоторые свойства, возможно добавляя и удаляя объекты в коллекции. Вернемся к back-end, затем я снова присоединяю то, что нужно, но часто получаю ошибку, что объект уже прикреплен. Но если я попытаюсь проверить это с помощью TryGetObjectStateEntry, это также вызывает исключение, говорящее мне, что это не в контексте! (tbc) –
Итак, кажется, что существует конфликт, потому что я пытаюсь использовать объект, который все еще привязан к предыдущему объекту. Если я сначала отключу этот объект, когда первый контекст будет удален, у меня нет никаких проблем. Поэтому я пришел к выводу, что объект следует всегда отделять, если он будет использоваться в другом контексте. Правда? –