0

我是 asp.net mvc 的新手,我有一些问题,我想我可以用 asp.net 网络表单很容易地解决它们。但是项目必须在 mvc 中,所以这就是问题所在。

我有 X 表

table1 用户 int user_ID string 用户名

table2 Friends int FriendshipID int user_ID intfriend_ID

在表 2 中,user_ID 代表当前登录的用户。friend_ID 代表他朋友的 id。它的一对多关系。现在我想做的是,在用户/详细信息/ID 视图中,显示该用户的所有朋友。我要进行的查询是:首先从 table2 中选择朋友 ID,其中 user_ID = id(来自查询字符串),然后从 table1 中选择每个用户名,其中 user_ID = 朋友 ID。

我认为这在 SQL 中真的很容易,但不知道如何使用 mvc 语法来做到这一点。

控制器:

// // 获取:/用户/详细信息/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; }
}
4

2 回答 2

0

制作您自己的 ViewModel 类。从数据库中检索数据并构建模型类对象。将此模型类传递给视图,即基于此模型类创建您的视图。

于 2012-06-12T07:07:32.133 回答
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] 属性对其进行注释。

于 2012-06-12T07:09:22.797 回答