ошибка при назначении коллекции свойству навигации, когда dbcontext удален

у меня есть многоуровневое приложение, сначала использующее базу данных EF5 - ADO.NET и MVC4, и у меня возникает проблема, когда я пытаюсь загрузить некоторые свойства без EF. я имею в виду, скажем, у меня есть сущность A, например:

A
{
     public int id {set; get;}
     public string name {set; get;}
     public virtual ICollection<B> B { get; set; }
}

поэтому в некоторых случаях у меня уже есть коллекция B, загруженная по другой причине, и мне нужно назначить ее A

как простой:

a.B = b;

это происходит на уровне моей бизнес-логики, поэтому dbcontext уже давно удален

но когда я пытаюсь получить доступ к свойству B, я получаю только System.ObjectDisposedException и сообщение об ошибке, в котором говорится

кто-нибудь знает, как это решить?

Экземпляр ObjectContext удален и больше не может использоваться для операций, требующих подключения.


person EricGS    schedule 06.11.2013    source источник


Ответы (1)


Это происходит потому, что объект A был загружен в контексте, в котором есть и ProxyCreationEnabled = true, и LazyLoadingEnabled = true. Таким образом, объект A является прокси-объектом, который по-прежнему пытается инициировать ленивую загрузку при доступе к его дочерним коллекциям.

Таким образом, вы можете отключить одно из этих свойств, чтобы предотвратить ленивую загрузку после удаления контекста. В качестве альтернативы или дополнительно вы можете загрузить a с его коллекцией B, загруженной с помощью Include:

a = context.As.Include(a => a.B).Single(...);
person Gert Arnold    schedule 06.11.2013