0

特定のユーザーが特定の時間に利用できるアイテムをクエリするためにServiceOperationを持っています。要するに このMethodeの処理を行います。IQueryableを返すServiceOperationでいくつかのエンティティを操作することは可能ですか

var fullResult = from i in Items where ... select i; //get ALL possible items where..., 

これはアイテム{A、B、C、D}を返すとしましょう。 2番目のクエリは、呼び出し元のユーザーがアクセス可能なアイテムをフィルタリングします。

var clientResult = from ci in fullResult where (privilege's and schedule's are true) 

このダニは{A、C}になり、返されます。 クライアント側の結果は次のとおりです。クライアントがアクセスできる項目の一覧のみが表示されます。これは検索に間違いがあったかどうかわからないので、迷惑になることがあります。

クライアント{A、B、C、D}のすべての可能な結果を​​表示することができますが、この場合FLAG BとDは使用できないと表示されます。

私のエンティティはすでにisReadOnlyプロパティを使用しています。

フィルタをかけるだけでなく、残りの結果を読み取り専用としてフラグを立てることはできますか?理想的な結果は、{A、B.isREadOnly = true、C、D.isReadOnly = true}です。

また、実行可能な制限に達しましたか、伝統的なWCF Webメソッドを作成して、別のクラス、結果のリストを返しますか?

PS:この「IsReadOnlyの」プロパティは、これだけのために使用されている私がいた場合、私はそれがすべてのポインタのためのすべての

ありがとうでDBに変更され

アンドレアス

答えて

1

を気にしません私はあなたのサービスから直接エンティティを返さず、その代わりにReadOnlyプロパティを持つものにマップすることを検討します。たとえば、あなたのエンティティがある場合:

[DataContract] 
public class AExtra 
{ 
    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public bool IsReadOnly { get; set; } 
} 

これが意味することは、あなたのクエリでこれを行うことができることである:

var res = from a 
      in Items 
      where (...whatever your original logic is) 
      select new AExtra 
      { 
       Name = a.Name, 
       IsReadOnly = (...put your logic for determining ReadOnly in here) 
      }; 

public class A 
{ 
    public string Name { get; set; } 
} 

は、その後、あなたは、このようなデータコントラクトを持つことができます

サービス操作からresを返します。

私は実際にはエンティティを直接サービスから外すのではなく、このようなことをしたいと思っています。ノックオンエフェクトをあまり使わなくても、物事を変えることができます。

+0

私はフォローアップQを持っています。私のモデル(すなわち、エンティティA(DB)、AExtra(MyOwnEntity))内のDBエンティティに拡張エンティティを追加する必要があります。 私は変更インターセプタでいくつかの魔法をしなければならないと思いますが、変更を保存するにはどうすればいいですか? ? – Andreas

+0

はい、更新する必要があるときに変更トラッキングを失うと、コンテキストから再度取得し、AExtraのプロパティを設定して保存する必要があります。コンテキストがまだ残っていると、キャッシュされたバージョンが返される可能性があります。そのため、エンティティを元に戻してプロパティを設定すると、効率的ではありません。SQLプロファイラなどでクエリを確認してください。私はいつもエンティティフレームワークのバックエンドで通常のwcfサービスを使用していますので、データサービスにはこれを別の方法で実行できる方法があるかどうかは言えません – kmp

+0

私は試してみるつもりです。唯一のオプションです。私はこの操作を別のServiceOperation呼び出しで終了しているので、この場合は変更トラッキングダニを紛失しても問題ありません。 〜 – Andreas

関連する問題