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),序列化并发送到 WCF LINQService。该服务为 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 回答