EF 他のエンティティを含む (Generic Repositoryパターン)
2023-08-13 07:34:04
質問
私は、Entity Framework Code Firstの上でGeneric Repositoryパターンを使用しています。私がクエリでより多くのエンティティを含める必要があるまで、すべてがうまくいっていました。私は1つのエンティティをうまく含めることができましたが、今私は複数のエンティティを含める方法を見つけ出すことができません。私がこれまでに得たものを確認してください。
public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class
{
var entityName = GetEntityName<TEntity>();
return _objectContext.CreateQuery<TEntity>(entityName);
}
public IList<TEntity> GetQueryWithInclude<TEntity>(string toInclude) where TEntity : class
{
var entityName = GetEntityName<TEntity>();
return _objectContext.CreateQuery<TEntity>(entityName).Include(toInclude).ToList();
}
private string GetEntityName<TEntity>() where TEntity : class
{
return string.Format("{0}.{1}", _objectContext.DefaultContainerName, _pluralizer.Pluralize(typeof(TEntity).Name));
}
私が行おうとしたがうまくいかなかったことは、関数に文字列の配列を渡し、それからクエリの上に "append"を追加しようとしたことです。GetQueryWithIncludeを呼び出して、クエリの結果を集約するために一度にエンティティ名(実際にはナビゲーション・プロパティ)を渡したらどうかと思いましたが、これでは呼び出しごとにクエリの結果が複製されるのではないかと心配です...。これを動作させるための最良の方法は何だと思いますか?
事前にありがとうございます!
UPDATEです。
私が実現しようとしていることの一例です。
public IQueryable GetQueryWithIncludes(string[] otherEntities)
{
var entityName = GetEntityName<TEntity>();
//now loop over the otherEntities array
//and append Include extensions to the query
//so inside the loop, something like:
_objectContext.GetQuery<TEntity>(entityName).Include(otherEntities[index]);
}
どのように解決するのですか?
IQueryableのInclude拡張だけを使用します。これは、EF 4.1 アセンブリで利用可能です。上位層でそのアセンブリを参照したくない場合は、データアクセスアセンブリでラッパー拡張メソッドを作成します。
以下に例を示します。
public static IQueryable<T> IncludeMultiple<T>(this IQueryable<T> query, params Expression<Func<T, object>>[] includes)
where T : class
{
if (includes != null)
{
query = includes.Aggregate(query,
(current, include) => current.Include(include));
}
return query;
}
などと使うことになります。
var query = context.Customers
.IncludeMultiple(
c => c.Address,
c => c.Orders.Select(o => o.OrderItems));
このクエリは、すべての顧客の住所と注文を読み込み、すべての注文はその注文項目を含むことになります。
関連
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] LINQ to Entities クエリでエンティティを構築できません。
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み】PHPで適切なリポジトリパターンを設計するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015