实体框架,急切加载

本文关键字:加载 框架 实体 | 更新日期: 2023-09-27 18:30:18

我有 3 个类,我想在 ASP.NET MVC C# WEBAPI 应用程序上互相"交谈"。它们是,项目,它只能有一个用户,但用户可以对多个项目进行多个注释,一个注释可以有多个用户,但只有一个项目

我的课程如下:

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public ICollection<Comment> Comments { get; set; }
    public User User { get; set; }
}
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public ICollection<Item> Items { get; set; }
    public ICollection<Comment> Comments { get; set; }
}  
public class Comment
{
    public int Id { get; set; }
    public string Message { get; set; }
    public bool Important { get; set; }
    public Item Item { get; set; }
    public User User { get; set; }
}

我正在使用 angularJs 前端,为了不让我得到一个永远重复的循环,我配置了以下内容:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
        GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

我正在使用实体框架 6,我想显示所有项目,包括评论和已评论的用户

我读过,有感觉吗? 使用 Linq 进行投影可能是最好的?

我的数据库上下文中有以下内容。(P.S,我已经禁用了LazyLoad,并包括System.Data.Entity命名空间)

using(var _db = new dbContext)
{
   var model = _db.Items.Include(i=>i.Comments.Select(p=>p.User).Select(vm=>new ViewModelItem(){
     //here I think is where I would say.... 
     ViewModelItem.Name = x.Name,
     ViewModelItem.Description = x.Description,
     ViewModelItem.Comments = ///
     ViewModelItem.Comments.User.Name = ///
   })).ToList();
  return Ok(model);
}

我不知道从这里去哪里。

因此,我想显示所有评论并包括拥有该项目的用户,但也包括该项目的所有评论,以及对该项目发表评论的所有用户

不会引起无限循环。

如果我不清楚,请让我澄清。一如既往的任何帮助将不胜感激。

谢谢

实体框架,急切加载

假设您的评论数据很好,这应该可以做到。

    var model = db.Comment.Select(p=>
    new ViewModelItem { 
        Name =   p.User.Name,
        Comments=p,
        Description=p.Item.Description,
    });