DbSet<dbo_Deal>
を使用する多くの既存のクエリがあり、権限のないユーザーの機密取引を除外する必要があります。私はDbSet<dbo_Deal>
を無効にする方法があるかどうかを知りたいので、デフォルトの動作ではなくテーブル値のパラメータを使用して選択します。Entity Framework DbSetを選択するときにテーブル値関数を呼び出すことはできますか?
[DbFunction("MyDbContext", "GetDeals")]
[CodeFirstStoreFunctions.DbFunctionDetails(DatabaseSchema = "dbo")]
public IQueryable<dbo_Deal> GetDeals()
{
var userKeyParam = new System.Data.Entity.Core.Objects.ObjectParameter("UserKey", typeof(int)) { Value = _userKey };
return ((System.Data.Entity.Infrastructure.IObjectContextAdapter)this).ObjectContext.CreateQuery<dbo_Deal>("[MyDbContext].[GetDeals](@UserKey)", userKeyParam);
}
:SQLの関数を呼び出すには、私のDbContextに次
CREATE FUNCTION [dbo].[GetDeals](@UserKey int)
RETURNS TABLE
RETURN (
SELECT d.*
FROM dbo.Deal d
WHERE d.Confidentiality = 0
OR EXISTS(SELECT *
FROM dbo.UserRole ur
WHERE ur.UserKey = @UserKey
AND ur.Role = 'Admin')
);
は、私も追加しました:ユーザーがアクセス権を持っていない場合
私は秘密の取引を除外し、次のTVFを作成しました私はこの関数を呼び出すためにすべてのクエリをリファクタリングできることは知っていますが、Entity Frameworkに何らかの理由でこの関数を使用するように指示できれば素晴らしいでしょう。それは可能ですか?
インターセプタを見て、それがうまくいくかどうかを確認します。 :) –