实体框架,急切加载
本文关键字:加载 框架 实体 | 更新日期: 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,
});