前提・実現したいこと
前提
・Controllerに該当するStudentInfoesController.cs、Modelに該当するStudentInfo.cs、Viewに該当するIndex.chtmlを作成
・DBのリレーションは下図の通り
実現したいこと
・Index.cshtmlにて、UserInfoテーブルのデータを取得・表示したい
DBは下図の通りです。
発生している問題・エラーメッセージ
・下記ViewにてStudentNameは表示されているが、ClassNameは表示されない。
該当のソースコード
DBは下記の通りUserInfoの外部キーにStudentIdを据えています。
UserInfo
CREATE TABLE [dbo].[UserInfo] ( [StudentId] INT NOT NULL, [UserInfoId] INT NOT NULL, [ClassName] NVARCHAR (128) NULL, PRIMARY KEY CLUSTERED ([UserInfoId] ASC), CONSTRAINT [FK_UserInfo_ToTable_3] FOREIGN KEY ([StudentId]) REFERENCES [dbo].[StudentInfo] ([StudentId]) );
StudentInfo
CREATE TABLE [dbo].[StudentInfo] ( [StudentId] INT NOT NULL, [StudentName] NVARCHAR (128) NULL, PRIMARY KEY CLUSTERED ([StudentId] ASC) );
ControllerではUserInfoと内部結合しており、SELECTにてStudentId,StudentName,ClassNameを取得、Index.cshtmlにアクセスした際、StudentName,ClassNameを表示する処理を行いたいです。
ここで、StudentId,StudentNameは正常に取得・表示出来ておりますが、ClassNameはNULLを返している状態です。
*該当箇所のみ抜粋
Controller部分
StudentInfoesController.cs
C#
1 public ActionResult Index() 2 { 3 List<StudentInfo> model = null; 4 model = db.Database.SqlQuery<StudentInfo>(@" 5 SELECT 6 StudentInfo.StudentId, 7 StudentInfo.StudentName, 8 UserInfo.ClassName 9 INNER FROM 10 StudentInfo 11 JOIN 12 UserInfo 13 ON 14 StudentInfo.StudentId = UserInfo.StudentId 15 ").ToList(); 16 return View(model); 17 }
View部分
Index.cshtml
C#
1<!DOCTYPE html> 2 3<html> 4<head> 5 <meta name="viewport" content="width=device-width" /> 6 <title>生徒名簿</title> 7</head> 8<body> 9 <table class="table"> 10 <tr> 11 <th> 12 生徒名 13 </th> 14 <th> 15 クラス名 16 </th> 17 </tr> 18 19 @foreach (var item in Model) 20 { 21 <tr> 22 <td> 23 @Html.DisplayFor(modelItem => item.StudentName) 24 </td> 25 <td> 26 @Html.DisplayFor(modelItem => item.ClassName) 27 </td> 28 </tr> 29 } 30 </table> 31</body> 32</html>
Model部分
StudentInfo.cs
C#
1 public partial class StudentInfo 2 { 3 public int StudentId { get; set; } 4 public string StudentName { get; set; } 5 public string ClassName { get; set; } 6 7 public virtual ICollection<UserInfo> UserInfo { get; set; } 8 }
試したこと
・「サーバーエクスプローラー」→右クリック→「新しいクエリ」にてSQL単体を実行させたところ、ClassNameは取得出来ていた。
・SQL文にブレークポイントを置いて確かめたところ、ClassNameはNULLを返した。
・StudentInfoにて実行したCRUDををUserInfoでも実行したところ、StudentInfoのデータは取得・表示できた。
以上より、多重度が関係していると思ったのですが、多重度の違いによってデータの取得・表示が異なるのでしょうか。
助言いただけると幸いです、よろしくお願いいたします。
開発環境
ASP.NET MVC5.2.4
Entity Framework 6.2.0
Identity.Entity.Framework 2.2.2
DB:SQL Sever
回答1件
あなたの回答
tips
プレビュー