C# 如何避免在实体框架中加载集合属性

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

当我选择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; 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。如果您自己编写了这个方法,那么您不需要创建扩展类,但是如果这个方法是自动生成的,那么您将需要它。