我是asp.net mvc的新手,我遇到了一些问题,我认为用asp.net网络表单可以很容易地解决这些问题。但是项目必须是mvc,所以这就是问题所在。
我有X表
table1用户 int user_ID 字符串用户名
table2朋友们 int friendshipID int user_ID int friend_ID
在表2中,user_ID表示登录的当前用户.friends_ID表示来自其朋友的ID。它的一对多关系。 现在我要做的是,在用户/详细信息/ ID视图中,显示该用户的所有朋友。 我要做的查询是:首先从table2中选择friend_IDs,其中user_ID = id(来自querystring),然后从table1中选择user_ID = friend_ID的每个用户名。
我认为这在SQL中非常简单,但不知道如何使用mvc语法。
控制器:
// // GET:/ User / Details / 5
public ViewResult Details(int id)
{
User user = db.Users.Find(id);
return View(user);
}
观点:
@model Social2.Models.User
<div class="display-label">Friends</div>
<div class="display-field">
@foreach (var friend in @Model.Friends)
{
@friend.User.username;
}
</div>
视图返回错误的结果。
模特
public partial class User
{
public User()
{
this.Albums = new HashSet<Album>();
this.Friends = new HashSet<Friend>();
this.Messages = new HashSet<Message>();
this.Posts = new HashSet<Post>();
this.Groups = new HashSet<Group>();
}
public int user_ID { get; set; }
public System.Guid user_UniqueID { get; set; }
public string username { get; set; }
public virtual ICollection<Album> Albums { get; set; }
public virtual aspnet_Users aspnet_Users { get; set; }
public virtual ICollection<Friend> Friends { get; set; }
public virtual ICollection<Message> Messages { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual ICollection<Group> Groups { 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; }
}
也是上下文
public partial class ASPNETDBEntities : DbContext
{
public ASPNETDBEntities()
: base("name=ASPNETDBEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<Album> Albums { get; set; }
public DbSet<aspnet_Users> aspnet_Users { get; set; }
public DbSet<Friend> Friends { get; set; }
public DbSet<Group> Groups { get; set; }
public DbSet<Message> Messages { get; set; }
public DbSet<Picture> Pictures { get; set; }
public DbSet<Post> Posts { get; set; }
public DbSet<sysdiagram> sysdiagrams { get; set; }
public DbSet<User> Users { get; set; }
}
答案 0 :(得分:0)
创建自己的ViewModel类。从数据库中检索数据并构建模型类对象。通过此模型类进行查看,即根据此模型类创建视图。
答案 1 :(得分:0)
由于好友列表属性是虚拟的,因此查询不会包含该属性。尝试使用以下查询来包含好友。
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);
}
查看:
<table>
@foreach (var friend in @Model.Friends)
{
<tr>
@Html.DisplayFor(modelItem => friend.User.username)
</tr>
}
</table>
您的模型类似乎没有遵循实体键的约定。字段“user_ID”和“friendship_ID”应为UserId和FriendId。或者,如果你想键入它们,就像用[key]属性注释它们一样。