Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql asp.net mvc 3 EF从一对多关系查询_Sql_Asp.net Mvc 3_Entity Framework - Fatal编程技术网

Sql asp.net mvc 3 EF从一对多关系查询

Sql asp.net mvc 3 EF从一对多关系查询,sql,asp.net-mvc-3,entity-framework,Sql,Asp.net Mvc 3,Entity Framework,我是asp.net mvc新手,我有一些问题,我想我可以用asp.net web表单轻松解决它们。然而,项目必须在mvc中,所以问题就在这里 我有X张桌子 表1用户 int用户标识 字符串用户名 表2朋友 int友谊ID int用户标识 int友人ID 在表2中,user_ID表示当前登录的用户。friend_ID表示来自其朋友的ID。这是一对多的关系。 现在我想做的是,在user/details/ID视图中,显示该用户的所有朋友。 我要进行的查询是:首先从表2中选择friend\u ID,其中

我是asp.net mvc新手,我有一些问题,我想我可以用asp.net web表单轻松解决它们。然而,项目必须在mvc中,所以问题就在这里

我有X张桌子

表1用户 int用户标识 字符串用户名

表2朋友 int友谊ID int用户标识 int友人ID

在表2中,user_ID表示当前登录的用户。friend_ID表示来自其朋友的ID。这是一对多的关系。 现在我想做的是,在user/details/ID视图中,显示该用户的所有朋友。 我要进行的查询是:首先从表2中选择friend\u ID,其中user\u ID=ID(来自querystring),然后从表1中选择每个用户名,其中user\u ID=friend\u ID

我认为这在SQL中非常容易,但我不知道如何使用mvc语法

控制员:

// //获取:/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 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; }
}
公共部分类ASPNETDBEntities:DbContext
{
公共ASPNETDBEntities()
:base(“name=ASPNETDBEntities”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}
公共数据库集相册{get;set;}
公共数据库集aspnet_用户{get;set;}
公共数据库集好友{get;set;}
公共数据库集组{get;set;}
公共数据库集消息{get;set;}
公共数据库集图片{get;set;}
公共DbSet Posts{get;set;}
公共数据库集系统图{get;set;}
公共数据库集用户{get;set;}
}

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

由于好友列表属性是虚拟的,因此不会包含在查询中。尝试使用下面的查询包含好友

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>

@foreach(var friend in@Model.Friends)
{
@DisplayFor(modelItem=>friend.User.username)
} 

您的模型类似乎没有遵循实体键的约定。“用户ID”和“友谊ID”字段应为用户ID和友谊ID。或者,如果您想像那样为它们设置关键帧,请使用[key]属性对它们进行注释。

请在您的问题中添加正确的标记,以了解您正在使用的数据库访问技术。现在还不清楚什么是
db.Users
。我猜是实体框架,但请准确。同时显示您的模型类。您的问题更多地与您正在使用的数据库访问技术有关,与ASP.NET MVC无关。从模式和Find方法来看,您似乎正在使用EntityFramework DbContext访问数据库。请具体说明。如果是这样的话,可以尝试像
db.Users.Include(“Friends”).FirstOrDefault(u=>u.UserId==id)这样的查询您还没有提到您的模型类,因此查询有一些假设。很抱歉,是的,它是EF,请参阅editedOk以及如何在视图中显示它们?是的,它的EF,我编辑并添加了模型。我编辑了这篇文章,没有检查打字错误。我更喜欢在视图中加载用户详细信息,然后在页面加载后通过ajax获得好友列表,最好是json数据。这会让用户感觉网站很快。或者,当浏览器用户点击一些按钮时,通过ajax加载好友,如show friends。好吧,我完全按照你说的做了。第一个用户有两个朋友。当我转到“详细信息”时,它显示的是他的名字的2倍,而不是朋友的名字。我认为应该是
friend.User=db.Users.Find(friend.friend\u ID)集合被修改;枚举操作不能执行。当我更改为:friend.User=db.Users.Find(friend.friend\u ID)时,出现此错误;创建用户类的强类型视图。
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>