私が持っている次のエンティティを含むDBからエンティティを取得する方法ナビゲーションプロパティと子リスト総量
public class Objective
{
public virtual UserInfo AssignedUser { get; set; }
public int? AssignedUserID { get; set; }
public string ObjectiveText { get; set; }
public virtual ICollection<ObjectiveTask> Tasks { get; set; }
public virtual UserInfo User { get; set; }
public int UserID { get; set; }
}
一つの目的でしつの割り当てられたユーザーと、1人のユーザーが、多くのタスクを持っています。私はこの
(from objective in context.Set<Objective>() select objective)
.Include(o => o.User)
.Include(o => o.AssignedUser)
.ToListAsync();
ようなクエリでこれを行うと
DBからエンティティを取得した後、私はこの
public class ObjectiveListViewModel
{
public string AssignedString { get; set; }
public string ObjectiveText { get; set; }
public int TasksCount { get; set; }
public string UserContactName { get; set; }
}
マッピングの設定のように見えるDTOクラスにマップメーター
はしていません
すべてがクールです - ユーザーと割り当てられたユーザーのプロパティが読み込まれ、データを取得するためにDBに余分なクエリを行う必要はありません。
しかし、私は仕事の量で目標を返す必要があります。 は、私が作成したジェネリッククラス
public class EntitySubCount<TEntity>
{
public TEntity Entity { get; set; }
public int GroupCount { get; set; }
}
これを行うと、このようにそれを使用するには
(from objective in context.Set<Objective>() select objective)
.Include(o => o.User)
.Include(o => o.AssignedUser)
.Select(o=> new EntitySubCount<Objective> {
Entity = o,
GroupCount = o.Tasks.Count })
.ToListAsync();
しかし、ユーザーと割り当てられたユーザーのプロパティがロードされていない、それが取得するためにDBへの追加のクエリを必要とし、そのデータ。 私はそれが怠惰な読み込みのためにそれを理解します。
質問は - 私はどのようにDBから取得することができますエンティティロードされたナビゲーションと。プロパティとタスクの数を同時に表示しますか?
ありがとうございました
はい、それは動作し、私はこの解決策について知っています。クエリ結果をDTOに投影することを避けることができれば、私は考えていました。しかし、新しいものを発明せず、簡単で実用的なソリューションを使用する方が良いかもしれません。 – Nikolay
もう1つの方法は、エンティティを取得してからAutomapperのようなツールを使用してDTO/ViewModelに入力することです。実際には、 '.Project()。To'で1ステップで実行できる[拡張](https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions)があります。 –
ありがとうSteve。 Automapperをプロジェクトで使用して、エンティティをWebプロジェクトのViewModelsにマップしますが、IQueryableで動作するかどうかはわかりません。ありがとう、それは私のための新しい機会を開きます:) – Nikolay