【问题标题】:How to avoid to load collection property in Entity Framework如何避免在实体框架中加载集合属性
【发布时间】:2013-10-07 19:09:41
【问题描述】:

当我选择文章时,它选择了用户,但用户有一个文章的集合,所以文章再次选择用户。可能是递归导致内存不足, 调用处理为: 文章=>用户=>文章=>用户...

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; }
}

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;
    }

}

如何避免急切加载集合属性角色用户和文章?

【问题讨论】:

  • "可能是递归导致内存不足" 也许吧?或者正在发生这种情况?

标签: c# entity-framework


【解决方案1】:

您需要在 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;
}

你需要在另一个类中实现它,它可以是一个部分类。

【讨论】:

  • 如何在 edmx 属性上设置 LazyLoad?
  • "你需要在另一个类中实现它,它可以是一个部分类。"你能澄清一下吗?
  • 为什么没有 Include 方法?
  • 要启用延迟加载,只需双击解决方案窗格上的“Model.edmx”文件,单击图表的空白区域并转到属性窗格。在“代码生成”组中查找名为“启用延迟加载”的属性,并将其设置为 True。如果您自己编写了此方法,则无需创建扩展类,但如果此方法是自动生成的,则您将需要它。
  • 我已经设置了“启用延迟加载”树。
猜你喜欢
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2013-07-11
  • 2022-01-11
  • 2011-10-20
相关资源
最近更新 更多