答案看起来很明显,但是,我所面对的是不同的。 我有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功能(因为我在其他情况下使用它),但是,这次我不知道我需要做什么。