当我们已经包含实体时,如何修复错误“ObjectContext实例已被处置”?

时间:2015-07-11 07:30:14

标签: c# asp.net-mvc entity-framework visual-studio edmx-designer

答案看起来很明显,但是,我所面对的是不同的。 我有3个与消息相关的用户相关的表格客户。 我的想法是,我可以从某人或任何人发送消息,但始终会有目的地;

[Message]
 * UserIdFrom (int) nullable; 
 * UserIdTo (int) not nullable;

这两个字段都与我的表格相关

[Users]
 * UserId (int);
 * ClientId (int) not null;

与此另一张表相关

[Clients]
 * ClientId (Int);
 * CliName varchar;

我的 EDMX 将表映射如下:

[Message]
 * UserIdFrom (int)  
 * UserIdTo (int) 
 + _Navigation properties_ + 
 * UserFrom (0..1) related to [Users] (on Navigation properties) 
 * UserTo   (1..*) related to [Users] (on Navigation properties)

我的用户映射为:

[Users]
 * UserId (int)
 * ClientId (int)
 + _Navigation properties_ + 
 * Clients related to [Clients]
 * MessageFrom (0..1) related to [Message] (on Navigation properties) 
 * MessageTo   (1..*) related to [Message] (on Navigation properties)

最后我对客户进行了映射:

[Clients]
 * ClientId (int)
 * ClientName (string)
 + _Navigation properties_ + 
 * Users related to [User]

问题:

在我的控制器中,我有ActionResult,它返回从某人(或任何人)收到的(登录)消息列表。所以我有以下代码:

return View(db.Users.Where(u => u.UsuEmail.Trim() == User.Identity.Name.Trim()).FirstOrDefault().MessageTo);

在我看来,我尝试显示如下文字: Daniel (来自)刚发送消息给 Stackoverflow (到)

为此,我使用以下代码(显示消息列表):

@foreach (Messages message in Model)
{
   <p><strong>@message.UserFrom.Clients.ClientName</p>
}

当我尝试获取有关UserFrom中的客户的信息时出现问题,但是,我可以获得有关UserTo的信息;

因此,我尝试使用包含功能,尝试获取有关谁发送的信息(MessageFrom)。例如:

using (Entities db = new Entities()){    
  return View(db.Users.Include("MessageFrom").Where(u => u.UsuEmail.Trim() == User.Identity.Name.Trim()).FirstOrDefault().MessageTo);
}

using (Entities db = new Entities()){    
  return View(db.Users.Include("MessageFrom.Clients").Where(u => u.UsuEmail.Trim() == User.Identity.Name.Trim()).FirstOrDefault().MessageTo);
}

最有趣的是我可以获取有关收件人的信息,但我无法从发件人处获取信息。

我知道如何使用Include功能(因为我在其他情况下使用它),但是,这次我不知道我需要做什么。

0 个答案:

没有答案