1

Silverlight アプリケーションのドメイン サービスのデータベースからテーブルの列名を取得し、それらをクライアントのリスト ボックスで使用して選択する方法を教えてください。ここで LINQ Query を調べて 、Silverlight で列ヘッダーを取得しましたが、少し混乱することはありませんでした。

私の知る限り、Silverlight でドメイン サービスを記述してサーバー側のデータに到達し、Silverlight がクライアント側でコンテキストを作成し、そこでコンテキストを使用します。同じデータベースに到達し、上記のリンクのようにメソッドでそのコンテキストを使用しましたが、今回は「System.ArgumentException was unhandled by user code」や「Message=Keyword not supported: 'metadata'.」のような例外がありました。クライアント側でSystem.Data.Linqを使用できないため、クライアント側でもそのメソッドを使用できます

LinqToEntitiesDomainService クラスから継承されたドメイン サービスでこのメソッドを作成しています。この時点で本当に行き詰まっています。

すべての回答をいただければ幸いです。

4

1 に答える 1

1

これに対する組み込みのサポートはありません。ただし、次の SQL を使用してテーブルから列を取得できます。この例Foo.BarFooは、スキーマという名前のテーブルがあります。

SELECT c.name
FROM sys.objects o
JOIN sys.columns c
    ON o.object_id = c.object_id
JOIN sys.schemas s
    ON o.schema_id = s.schema_id
WHERE
    s.name = 'Foo'
    AND o.name = 'Bar'

結果を取得するためにEntity Framework を使用してDbContextいます。

var commandText = "<SQL from above>";
var contextAdapter = (IObjectContextAdapter) this;
IEnumerable<string> columnNames = contextAdapter.ObjectContext.ExecuteStoreQuery<string>(commandText);

その後、invoke メソッドを DomainService に追加できます。

[Invoke] // Use invoke for non-entities
public string[] GetColumnNames(string table)
{
    // Format the SQL and get the results;
    return columnNames.ToArray();
}
于 2012-07-26T16:03:44.100 に答える