2

記事を選択するとユーザーが選択されますが、ユーザーは記事のコレクションを持っているため、記事はユーザーを選択し直します。メモリ不足の再帰的な原因の可能性があります。呼び出し処理は次のとおりです: article=>user=>article=>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; }
}

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

}

コレクション プロパティ roleusers と article を熱心にロードしないようにするにはどうすればよいですか?

4

1 に答える 1

0

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

部分クラスになる可能性のある別のクラスに実装する必要があります。

于 2013-10-01T15:54:12.120 に答える