エンティティのテーブル(ドキュメントとしましょう)があり、各ドキュメントには異なるエンティティが接続されている場合があります(許可としましょう)。パーミッションには、ドキュメント テーブルへの外部キーがあります。
例:
スキーマ:
Document -> Id | Data
Permission -> Id | EntityId | PermissionData
内容:
Document -> 1 | "This is my first doc"
Permission -> 12 | 1 | "This is doc 1's permission set"
テーブルの場合Permission
、問題はありませんInclude
。クエリでメソッドを使用して、接続されたアクセス許可を受け取るだけです。
ctx.Include(d => d.Permission)...
ただし、Permission
実際には複数のテーブルを含む複雑なスキームであり、SQL Server テーブル値関数を使用して計算されます。
Permission
すべての通常のテーブル エンティティと同様にエンティティを作成し、テーブル結合の代わりにデータベース関数呼び出しを実行するように Entity Framework を構成しようとしています。
パーミッションがテーブルであり、それをクエリに含めた場合、SQL の実行は次のようになると予想されます。
select *
from document d
join permission p on d.Id = p.EntityId
その代わりに、次のようなことを達成したいと思います。
select *
from document d
join fn_getPermissions(p1,p2,p3...) p on d.Id = p.EntityId
パラメータ p1...pn がハードコードされていると仮定しましょう。ただし、SQL Server ではなく C# 側でデフォルトにする必要があります。
Entity Framework を使用してストアド プロシージャを使用するようにエンティティを構成するオプションを見ましたが、挿入、削除などではなく、クエリにストアド プロシージャを使用できる場所が見当たりませんでした。
DBFunctions
(を使用して)呼び出す方法を知っていますConventions
-明示的な関数呼び出しを探していません。主に Entity Framework で OData を使用しており、この場合だけに特定のメソッドを作成したくないため、Permission エンティティをテーブル エンティティとして扱いたいと考えています。
この種の動作を達成する方法はありますか? EF 6.x (コアではない) を使用しています。