Ну, ObjectContext, которые остаются на неопределенный срок, это нормально, если вы не продолжаете загружать / добавлять много новых объектов.
Каждый загруженный или добавленный объект всегда будет отслеживаться ObjectContext до тех пор, пока он не будет утилизирован, поэтому, если вы никогда не утилизируете и будете отслеживать больше объектов, он будет становиться все больше и больше.
Один из вариантов, который вы могли бы рассмотреть, - это использовать какой-либо служебный метод для доступа к какому-либо общеизвестному контексту или для создания временного контекста.
Ключом к этому является использование EntityReference.EntityKey и проверка того, что оба объекта отключены.
т.е.
this.CustomerType = Utility.GetDetachedObjectByKey<Customer>(
this.CustomerTypeReference.EntityKey);
Базовая реализация GetDetachedObjectByKey выглядит примерно так:
public static T GetDetachedObjectByKey<T>(EntityKey key)
where T: EntityObject
{
using (MyContext ctx = new MyContext())
{
T t = ctx.GetObjectByKey(key) as T;
ctx.Detach(t);
return t;
}
}
Это будет работать только в том случае, если исходная цель объекта также отсоединена. Вы можете поэкспериментировать с источником контекста, используемого этим методом.
Надеюсь, это поможет
Alex