0

Automapperには、予測を取得するための非常に優れた拡張機能があります。
アプリケーションのBLでは、次のようなメソッドを定義できます。

IEnumerable<TEntityProjection> GetProjections()
{
    return _context.EntitiesSet.Project().To<TEntityProjection>();
}

これにより、BLは非常にシンプルになります。投影バリアントごとに多くの異なるメソッドは必要ありません。
しかし...WCFサービスはオープンジェネリックをサポートしていません。
そのため、サービスクライアントがエンティティの必要なプロパティのみを取得できるようにするソリューションを探しています。

4

2 に答える 2

2

考えられる解決策は、Linq over WCF(BLToolkitに基づく)です。内部的には、linqクエリはSqlQuery(SQL AST)に解析され、シリアル化されてWCFLINQServiceに送信されます。このサービスは、DB(SQl Server、Oracle、MySqlなど)のSQLクエリを作成し、それを実行してデータを返します。匿名タイプがサポートされています。

クエリサンプル:

var client = new DataModel();

var q = from p in client.Person
        select new   
{
      p.PersonID,
      p.FirstName,
      p.MiddleName,
      p.LastName,
      p.Gender
};

foreach (var p in q)
  Console.WriteLine(p);

詳細:http://bltoolkit.net/Doc.LinqDataContext.ashx

サンプル:https ://github.com/igor-tkachev/bltoolkit/blob/master/Demo/Linq/OverWCF/Program.cs

于 2013-01-29T15:32:39.013 に答える
1

それはあなたがそれをやろうとしている方法では機能しません。

受信側で特定のプロパティが必要な場合は、次のことができます。

  • 個別のメソッドを作成します。各メソッドは、エンティティごとに特定の事前定義されたプロパティのセットを公開します
  • 「プロパティのリスト」パラメータ(文字列の配列の場合もあります)を受け取り、XMLまたはJSONを含む文字列を返すメソッドを作成します。これには、クライアントでのアセンブリが必要です。
  • クライアントの不要なプロパティを無視するだけです

どちらが最適かは、ケースの詳細によって異なると思います。

于 2013-01-29T11:37:37.243 に答える