linqとエンティティクエリおよびriaサービスとの相互作用に関する一般的な質問があります。私は私のdomainconext内で私のアプリケーションのクエリを定義することができます知っている。たとえば、私のドメインコンテキスト内でlinqを使って次のクエリを定義することができます:Linq、EntityQuery、およびRIAサービスの相互作用の明確化
public IQueryable<User> GetUsersFriends(Guid usersID)
{
return (from f in this.ObjectContext.Friends join u in this.ObjectContext.Users on f.FriendUsersID equals u.ID where f.UsersID.Equals(usersID) select u);
}
これはすべて良いです。しかし、私の質問は、クライアント側(silverlightアプリ)から同じ種類のクエリを実行できますか?ですから、EntityQueryオブジェクトに対してlinq文を作成し、この方法でデータベースからデータを返すことができますか?
私はが既にがロードされているエンティティのコレクションに対してlinq操作を実行できることを知っていますか?コレクションを読み込むためにクライアント側でlinqを使用できますか?
私は最終的にデータベースにヒットしたすべてのクエリを自分のドメインコンテキストで定義する必要があると考えていますか?癖のない私は新しいクエリを定義し、それらをdomaincontext.load()オペレーションに渡すためにlinqを使用しようとし続けます...これは悲惨に失敗します。 domainconextにはおそらく、行間でクエリをマーシャリングする方法はありません...そうですか?
私の理解は正しいですか?誰かが私のためにこれを確認するのに役立つなら、私はそれを感謝します。
はあなたにリチャードをありがとうございます。これは私のために少しクリアします。私の最後に同様のことを試みたときに、すぐに意味をなさないタイプのエラーメッセージが表示されました。あなたの説明では、私は今、私の問題を解決したテンプレートロード(domaincontext.load)であることを理解しています。しかし、私は、データベースがヒットしたファッションを制御することについてのあなたの要点を知っています。そのため、今のところ明らかにしておき、すべてをドメインコンテキストに入れてください。私はセキュリティに関するあなたのコメントを理解していませんでした。あなたはそれを説明できますか?ちょうど私自身の啓発のため。 –
エンドポイントがIQueryableとして公開されている場合は、任意の種類のフィルタ、ソート句などを使用してそのエンティティから情報を取得できます。ユーザーがクエリを作成し、そのクエリをエンドポイントに渡して情報を取得できるようにします。これは、追加情報を「含む」、または遅延読み込みを許可すると、より危険になります。どちらも、エンティティから始めて、データスキーマにナビゲートして追加情報を取得できることを意味します。覚えておいてください。これはIIS経由で公開されているものです.IISが公開されている場合は、このエントリポイントも公開されます。セキュリティは問題です。 – codeputer