【问题标题】:How to include sub-entity at ASP.Net MVC3 with Entity Framework如何在带有实体框架的 ASP.Net MVC3 中包含子实体
【发布时间】:2011-06-25 08:52:47
【问题描述】:

谷歌日!
谁能告诉如何包含子实体? 我有论坛项目。该页面,当我需要显示主题的所有帖子时,每个帖子都有帖子信息,用户信息,但是当时我需要有用户组和用户角色的信息。 (我不能附图片(信誉低),所以我尝试用文字来描述表格)
Post: id, Title, Text, UserId // Post.UserId = User.IdUser: id, Name, RoleId, GroupId // User.RoleId = RefRole.Id and User.GroupId = RefGroup.id
RefGroup: id, Name
RefRole: id、名称

如果我只包含用户实体,我会这样做:

    public ActionResult ViewTopic (int id)
    {
        ForumDBE forumDB = new ForumDBE();
        var posts = forumDB.Post.Include("User").ToList();
        return View(posts);
    }

但是我需要做什么,在 var post 我需要有 RoleName(例如管理员、版主、用户)和组名(例如 Good User、Best User、Advicer.. .) 在这样的视图中?

@model IEnumerable<MvcForum.Models.Post>

@foreach (var post in Model)
{
    User Name:  @post.User.Name
    User Group: @post.User.RefGroup.Name
    Uset Role:  @post.User.RefRole.Name
}

【问题讨论】:

  • 你试过了吗.Include("User").Include("User.RefGroup").Include("User.RefRole")。根据记忆,这是可行的,但我不是 100%,所以我会评论而不是回答。
  • 在 LINQ-to-SQL 中,例如,一旦您获得了具有 Users 表和 RefGroups 表之间关系的模型,它会自动在 User 中定义一个名为 RefGroup 的新属性.但在 EF 中,我无能为力。
  • 我花了几天时间寻找答案......非常感谢!有用!! var posts = forumDB.Post.Include("User").Include("User.RefGroup").Include("User.RefRole").ToList();

标签: c# asp.net-mvc-3 entity-framework-4


【解决方案1】:

在 Entity Framework 4 默认配置中,您不必使用Include

public ActionResult ViewTopic (int id)
    {
        ForumDBE forumDB = new ForumDBE();
        var posts = forumDB.Post; // or you can use .ToList() but I prefer to use IQueryable
        return View(posts);
    }

然后

@model IQueryable<MvcForum.Models.Post>

@foreach (var post in Model)
{
    User Name:  @post.User.Name
    User Group: @post.User.RefGroup.Name
    Uset Role:  @post.User.RefRole.Name
}

它将使用延迟加载,因为您使用的是IQueryable 而不是IEnumerable

【讨论】:

  • 它也可以var posts = forumDB.Post.ToList();...谢谢大家的帮助!!!谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
相关资源
最近更新 更多