しばらくこれに固執していたので、質問しようと思いました。ここに欠けている単純なものがあると確信しています。簡単なアプリを作成して、自分で Asp.net mvc 4 を学習しようとしています。
モデルは次のとおりです。
public class Category
{
public int Id { get; set; }
[Required]
[StringLength(32)]
public string Name { get; set; }
//public virtual ICollection<Note> Notes { get; set; }
private ICollection<Note> notes;
public ICollection<Note> Notes
{
get
{
return this.notes ?? (this.notes = new List<Note>());
}
}
}
public class Note
{
public int Id { get; set; }
[Required]
public string Content { get; set; }
[Required]
[StringLength(128)]
public string Topic { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
public virtual IEnumerable<Comment> Comments { get; set; }
public virtual ICollection<Tag> Tags {get; set;}
public Note()
{
Tags = new HashSet<Tag>();
}
}
public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Note> Notes { get; set; }
public Tag()
{
Notes = new HashSet<Note>();
}
}
コントローラーからリポジトリでこのメソッドを呼び出します。
public IQueryable<Note> GetAll()
{
var query = _db.Notes.Include(x => x.Category).Include(y => y.Tags);
return query;
}
ホームコントローラーで、すべてのメモのリストを返そうとしていますが、それが属するカテゴリ名とメモに付随するタグを含めたいと考えています。最初は表示されなかったので、熱心な読み込みに関するチュートリアルをいくつか読んで、それらを表示する方法を見つけました。
しかし、私の方法はそれほど効率的ではありません。カテゴリとタグのナビゲーション プロパティがノートのクエリを再度送信しているため、ミニ プロファイラーはクエリの重複を求めています。カテゴリとタグ オブジェクトに必要なプロパティを返す方法はありますか?
私はいくつかの方法を試しましたが、うまくいきませんでした。私はこのようなことができることを望んでいました:
var query = _db.Notes.Include(x => x.Category.Name).Include(y => y.Tags.Name);
しかし、エラーが発生します: デリゲート型ではないため、ラムダ式を型 '文字列' に変換できません
その前に、いくつかの using ステートメントの欠落が原因で発生したエラーを見たことがあるので、すでにそれを再確認しました。
助言がありますか?助けてくれてありがとう