2009-04-07 11 views
1

私はいくつかの異なる永続化データセットでフィルタを指定できるようにするSilverightアプリケーションを持っています。永続化されたデータは、XMLまたはリレーショナルデータベーステーブルです。私は、データベース・オプションとして、異なるデータベース・オプション、PostgreSQL、MySQLを最低限サポートする必要があるため、nHibernateをデータベース・レイヤーとして使用しています。フィルター・フィールドは、どのデータ・セットが照会されているかによって異なります。SilverlightのXMLとデータベースフィルタリング:動的LINQ?より良い方法がありますか?

現在、フィルタはSilverlightクライアントからサーバーに文字列として渡され、サーバー上でDynamic LINQクラスを使用してLINQクエリに変換します。これは、すべてのデータがメモリにロードされたXMLの場合にはうまくいきますが、データベースにとって最良のアプローチかどうかはわかりません。

私の質問は、クライアントからの文字列としてフィルターを送信し、次に動的LINQライブラリーを解析するのが最善の方法かどうかです。 nHibernateで生成されたLINQクエリを使用することはできますか?あるいは、SilverlightでExpressionオブジェクトをシリアル化してサーバーに渡すことを検討する必要がありますか?それとも別の方法がありますか?

アクセスのための標準インターフェースを提供するために私の遠いオブジェクトが必要です。それらのいくつかがありますので、必要なフィルターごとに異なるメソッドインターフェースを提供するオプションはありません。

以下は、私のパーシスタンスクラスがサポートするインターフェイスの例です。私が苦労しているのはwhereExpressionです。

public interface ICustomerPersistor 
{ 
    Customer Add(Customer customer); 
    Customer Update(Customer customer); 
    Customer Delete(Customer customer); 
    Customer Get(Guid customerId); 
    int Count(string whereExpression); 
    Customer Get(string username, string password); 
    List<Customer> Get(string whereExpression, int offset, int count); 
} 

答えて

1

ADO.NET Data Servicesについて考えましたか?これにより、REST API(WCF対応)を介してLINQクエリを実行できますが、ツールはすべての重労働を実行します...

標準のLINQフィルタ(その他)の多くはサポートされています構成される。特に

、データを照会 ため、ADO.NET Data Servicesは問題ないはずです - updateingデータのために、あなたはより多くの作業を行う(または更新のための独立した、非REST APIを使用)する必要があります。私はLINQ-to-SQLのためにこれをカバーする一連のposts on my blogを持っています(他のLINQプロバイダにとっても同様です)。

+0

更新は本当に私が立ち往生している質問です。私はあなたのブログとただ1つのqについて素早く見ました。 ADO.Netデータ・サービスを使用してRESTを介して問合せを転送していますが、サーバー側では問合せへのフルアクセス権が必要です。私の場合、diff LINQプロバイダーで使用します – sipwiz

+0

ADO.NET Data Servicesは、IQueryable のプロパティを公開して公開しています。つまり、IQueryable が公開され、残りの部分は公開されます。しかし、あなたがあなた自身のプロバイダを書かない限り、あなたは完全な*コントロールを持っていません。 「Where」「OrderBy」「Skip」「Take」などが適用されます。 –

関連する問題