ビジネスロジックプロジェクトを使用して汎用データアクセスレイヤを作成する必要があります。ビジネスロジックレイヤはリポジトリを持つDALレイヤと対話する必要があります。 短命のデータコンテキストと、IQueryableではなくIEnumerableを返すすべてのリポジトリメソッドが必要です。 GetAllメソッドの例でプロンプトを表示して、ThenIncludeまたはDependent Tableを選択して、接続されたデータを抽出する方法を説明します。エンティティフレームワークのコア、インクルードナビゲーションプロパティを使用した汎用リポジトリメソッド
public class GenericDataRepository<T> : IGenericDataRepository<T> where T : class
{
public virtual IList<T> GetAll(params Expression<Func<T, object>>[] navigationProperties)
{
List<T> list;
using (var context = new Context())
{
IQueryable<T> dbQuery = context.Set<T>();
//Apply eager loading
foreach (Expression<Func<T, object>> navigationProperty in navigationProperties)
dbQuery = dbQuery.Include<T, object>(navigationProperty);
list = dbQuery
.AsNoTracking()
.ToList<T>();
}
return list;
}
}
ThenInclude(PROP2 => prop2.i)?
dbQuery.Include(navigationProperty).ThenInclude(PROP2 => prop2.i)
ありがとうございます。 データにアクセスするためのAPIを作成したかったので、ビジネスロジックのレイヤーを使用しました。将来的には、EFをダッパーで置き換えることができ、EFはマイグレーションのためだけに残しておきます。私はIGurebleのレイヤー、つまりビジネスロジックについて助言してくれますか?データアクセスレイヤーから抽象化された、私はビジネスロジックのレイヤーが必要です。 ビジネスロジック - >リポジトリ - > EF-> Db – Aldmi
このようなアダプタを切り替えると、問合せをどのように構築する必要があるかに重大な影響を及ぼす可能性があります。それが本当に目標であれば、アプリは 'layer.Get(someQuery、includeSomeStuff、moreLogic)'ではなく、 'layer.GetSomeSpecificThing()'のようなメソッドに依存したいと思っています。それは、無限に保守性と適合性が向上します。 –
はい、あなたは正しいです、ビジネスロジックは、多くの特定の方法を含み、リポジトリとの仕事を1つの特定の方法に組み合わせます。そして、EF上でデータへのアクセスを作成するようにアドバイスしますか? – Aldmi