答えは明白なように見えますが、私が直面していることは異なります。3 つのテーブルがあります。Messagesに関連するUsersに関連するClients。アイデアは、誰かまたは誰からでもメッセージを送信できるということですが、常に宛先があります。
[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 (from) just sent a message to Stackoverflow (to)
そのために、次のコードを使用します (メッセージのリストを表示するため)。
@foreach (Messages message in Model)
{
<p><strong>@message.UserFrom.Clients.ClientName</p>
}
UserFrom 内のクライアントに関する情報を取得しようとすると問題が発生しますが、UserTo に関する情報は取得できます。
ということで、 Include関数を使って、送信者(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);
}
最も興味深いのは、受信者に関する情報を取得できますが、送信者からの情報を取得できないことです。
インクルード関数の使い方は(別の場面で使っているので)知っているのですが、今回は何をすればいいのかわかりません。