タイトルが示すように、Asp.net mvc 3 EF のクエリで問題が発生しました。1対多の関係を持つ2つのテーブルを取得しました。
table1 ユーザー int user_ID 文字列 ユーザー名
table2 Friends int friendsID int user_ID int friend_ID
コントローラー:
// // GET: /ユーザー/詳細/5
public ViewResult Details(int id)
{
User user = db.Users.Include("Friends").FirstOrDefault(u => u.user_ID == id);
//Also for each friend get the User:
foreach (var friend in user.Friends.ToList())
{
friend.User = db.Users.Find(friend.friend_ID);
}
return View(user);
}
ビュー「詳細」:
@model Social2.Models.User
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div class="display-field">
@foreach (var friend in @Model.Friends)
{
@friend.User.username;
}
</div>
環境:
public partial class ASPNETDBEntities : DbContext
{
public ASPNETDBEntities()
: base("name=ASPNETDBEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<aspnet_Users> aspnet_Users { get; set; }
public DbSet<Friend> Friends { get; set; }
public DbSet<User> Users { get; set; }
}
ユーザーモデル:
public partial class User
{
public User()
{
this.Friends = new HashSet<Friend>();
}
[Key]
public int user_ID { get; set; }
public System.Guid user_UniqueID { get; set; }
public string username { get; set; }
public virtual aspnet_Users aspnet_Users { get; set; }
public virtual ICollection<Friend> Friends { get; set; }
}
友人モデル
public partial class Friend
{
public int friendship_ID { get; set; }
public int user_fr_ID { get; set; }
public int friend_ID { get; set; }
public virtual User User { get; set; }
}
問題は、~/user/details/1 に移動すると、ビューに 1 つ (最後の 1 つ) の友人しか表示されないことです。すべてのユーザーについて、最後の友人が表示されます。それらをすべて表示する方法は?