ADO.NETデータサービスを使用しており、クエリインターセプタで行レベルのセキュリティを実装して、ユーザーが見ることができるデータ。 ユーザーのユーザー名が別の表にあるという点で複雑です。だから、私は、ユーザーがそのユーザーのOnlineSubscriptionテーブルのエントリに応じて参照して、現在のイベントは次のように返されるすべてのエントリと一致するかどうかを返すことができるイベントのリストを取得すると考えていた:エンティティがADO.NETデータサービス内の項目のリスト内にある場合にtrueを返すようにクエリする
[QueryInterceptor("Events")]
public Expression<Func<Events, bool>> QueryEvents()
{
var allowedEventList = (from os in context.OnlineSubscription
from e in os.Events
where os.UserName == HttpContext.Current.User.Identity.Name
select e;
return e => events.Intersect(new List<Events>
{
e
}).Any();
}
しかし、これは「実装されていない」例外をスローします。だから私の質問です:クエリインターセプタのエンティティのリストに現在のエンティティを比較する正しい方法はありますか?
編集:私も試してみた:
return e => events.Any(evnt => evnt.Event_Key == e.Event_Key);
を任意の成功なしに(再び例外 "実装されていません" 取得します)。
問題が見つかりました。それは次のようにする必要があります。 string user = HttpContext.Current.User.Identity.Name; return p => p.User.Username == user; 代わりに、それが動作します。私はそれがちょうどADO.NETデータエンティティモデルは、SQLにLinqが渡して渡されるパラメータとしてHttpContext参照を変換する方法を知らないためだと思います。 –