0

Я знаю, как исправить эту проблему, но эта ошибка возникает в ситуации, совершенно другой для меня ,Как решить «Экземпляр объекта ObjectContext был удален и больше не может использоваться для операций, требующих подключения» для странной ситуации

В моем представлении MVC Razor У меня есть следующий код, который будет фильтровать список модели и принести мне конкретный объект на основе зарегистрированного пользователя, а также с полем, где результат отличается от нуля:

@{ 
    Models.PostOrcamentoServicoProposta proposta = Model.PostOrcamentoServicoProposta.FirstOrDefault(p => p.Usuarios.UsuEmail.Equals(User.Identity.Name, StringComparison.OrdinalIgnoreCase) && p.PosOrcSerProStatus != null); 
    if (proposta != null) 
    { 
     // create a div here 
    } 
} 

в моей ActionResult я следующую нагрузку

using (ServiciliEntities db = new ServiciliEntities()) 
{ 
    // include data 
    PostOrcamentoServico orcamento = db.PostOrcamentoServico.Include("PostOrcamentoServicoProposta").Where(o => o.PosOrcSerId == id).FirstOrDefault(); 
    return View(orcamento); 
} 

Как мы видим, на мой взгляд, я получаю модель, которая содержит список PostOrcamentoServicoProposta, и я хочу получить только один specic PostOrcamentoServicoProposta item согласно вошедшему пользователю.

Нет проблем об этом, но я также хочу, чтобы один гдеPosOrcSerProStatus не должен быть пустым.

И есть проблема, это поле PosOrcSerProStatus.

Поле Поле PosOrcSerProStatus - это Nullable<Enumerable>, и в некоторых случаях это может быть возможно для NULL.

Так что, когда я отладки мой взгляд, я могу видеть, что PosOrcSerProStatus равна нулю, и, что это нормально для меня, однако, даже если я пытаюсь манипулировать, чтобы получить только тот, который не обнуляемым с ! состояние p.PosOrcSerProStatus = нуль, то я получаю ошибку:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection 

Первый: список PosOrcSerProStatus заполняется в действие с Include ("PostOrcamentoServicoProposta");

Второй: Model.PostOrcamentoServicoProposta содержит объекты;

Третий: Во всех PostOrcamentoServicoProposta объектов они населены правильно и PosOrcSerProStatus может быть или не может быть пустым.

+0

Пожалуйста, добавьте больше кода в фактический блок кода. В настоящее время очень сложно следить за тем, что вы пытаетесь сделать. –

+0

Какой тип Model.PostOrcamentoServicoProposta? если IQueryable, этот код приведет к ленивой загрузке и запросу к базе данных, в этом случае перечислит ее в список. – DevilSuichiro

+0

@DevilSuichiro Model.PostOrcamentoServicoProposta - ICollection . Этот объект уже загружен – Dan

ответ

0

Я думаю, что ваша проблема в том, что PosOrcSerProStatus - это взаимоотношения с детьми и Nullable<Enumerable> не имеет смысла для сущности. Если инфраструктура entity хочет сделать .Include(), она пытается создать экземпляр и не может, потому что это null. Просто попробуйте создать PosOrcSerProStatus как виртуальный, как этот, и посмотреть, не решена ли она.

// Instantiate your class and at the same time make PosOrcSerProStatus a new list 
public PostOrcamentoServicoProposta() 
{ 
    PosOrcSerProStatuses = new List<PosOrcSerProStatus>(); 
} 

// Also make PosOrcSerProStatuses a virtual ICollection 
public virtual ICollection<PosOrcSerProStatus> PosOrcSerProStatuses { get; set; } 

Единственная вещь, которую я могу думать о том, что вы закрываете DbContext перед выполнением запроса в представлении ... то есть. вы используете using() в своем ActionResult, и когда он добирается до представления, и вы пытаетесь выполнить свой запрос FirstOrDefault(), DbContext уже закрыт.