C# 如何避免在实体框架中加载集合属性
当我选择artile时,它选择user,但user有一个文章集合,所以文章再次选择user。可能是递归导致内存不足, 呼叫处理是: 文章=>用户=>文章=>用户 ef实体是:C# 如何避免在实体框架中加载集合属性,c#,entity-framework,C#,Entity Framework,当我选择artile时,它选择user,但user有一个文章集合,所以文章再次选择user。可能是递归导致内存不足, 呼叫处理是: 文章=>用户=>文章=>用户 ef实体是: public partial class article { public int id { get; set; } public string title { get; set; } public string cont { get; set; } public Nullable<int> uid { get
public partial class article
{
public int id { get; set; }
public string title { get; set; }
public string cont { get; set; }
public Nullable<int> uid { get; set; }
public System.DateTime addtime { get; set; }
public Nullable<int> colid { get; set; }
public virtual user user { get; set; }
public virtual column column { get; set; }
}
public partial class user
{
public user()
{
this.roleusers = new HashSet<roleuser>();
this.articles = new HashSet<article>();
}
public int id { get; set; }
public string email { get; set; }
public string uname { get; set; }
public string upass { get; set; }
public virtual ICollection<roleuser> roleusers { get; set; }
public virtual ICollection<article> articles { get; set; }
}
公共部分类文章
{
公共int id{get;set;}
公共字符串标题{get;set;}
公共字符串cont{get;set;}
公共可空uid{get;set;}
public System.DateTime addtime{get;set;}
公共可空colid{get;set;}
公共虚拟用户用户{get;set;}
公共虚拟列{get;set;}
}
公共部分类用户
{
公共用户()
{
this.roleusers=new HashSet();
this.articles=new HashSet();
}
公共int id{get;set;}
公共字符串电子邮件{get;set;}
公共字符串uname{get;set;}
公共字符串upass{get;set;}
公共虚拟ICollection角色扮演者{get;set;}
公共虚拟ICollection项目{get;set;}
}
mysql EF操作类为:
public class ArtDao
{
readonly crmEntities _ent = new crmEntities();
public List<article> PageArts(int start, int limit, out int total)
{
var ll =
_ent.articles.OrderByDescending(o => o.id)
.Skip(start)
.Take(limit)
.ToList();
total = _ent.articles.Count();
return ll;
}
}
公共类ArtDao
{
只读crmEntities _ent=新crmEntities();
公共列表PageArts(整数开始、整数限制、整数总计)
{
变量ll=
_ent.articles.OrderByDescending(o=>o.id)
.跳过(开始)
.接受(限制)
.ToList();
总计=_ent.articles.Count();
返回ll;
}
}
如何避免急于加载集合属性roleusers和articles?您需要在edmx属性上设置LazyLoad,并在选择以下内容时使用Include()方法手动仅加载一级儿童:
public List<article> PageArts(int start, int limit, out int total)
{
var ll =
_ent.articles.OrderByDescending(o => o.id)
.Skip(start)
.Take(limit)
.Include(o => o.user)
.ToList();
total = _ent.articles.Count();
return ll;
}
公共列表页面艺术(整数开始、整数限制、整数总计)
{
变量ll=
_ent.articles.OrderByDescending(o=>o.id)
.跳过(开始)
.接受(限制)
.Include(o=>o.user)
.ToList();
总计=_ent.articles.Count();
返回ll;
}
您需要在另一个类中实现它,它可以是部分类。“可能是递归导致内存不足”可能?或者正在发生这种情况?如何在edmx属性上设置LazyLoad?“您需要在另一个类中实现它,它可以是一个部分类。”您可以澄清一下吗?为什么没有包含方法?要启用延迟加载,只需双击解决方案窗格上的“Model.edmx”文件,单击图表的空白区域并转到属性窗格。在“代码生成”组中查找名为“Lazy Loading Enabled”的属性,并将其设置为True。如果您自己编写了这个方法,那么您不需要创建扩展类,但是如果这个方法是自动生成的,那么您将需要它。