【问题标题】:How to use ServiceStack to get denormalized array of objects如何使用 ServiceStack 获取非规范化的对象数组
【发布时间】:2013-09-24 05:28:49
【问题描述】:

有人可以提供或链接到一个简单的示例,说明如何使用 ServiceStack 从现有 SQLServer 数据库中返回一个非规范化的对象数组,其中包含多个连接?

返回的对象只会包含查询中列的一小部分,并且会有不同的名称。

我更喜欢使用 ORMLite,但如果需要,我很乐意使用 EF。我将把它用于只读操作。

例如如果我要使用以下连接表查询数据库:CustomerOrderOrderline,我想返回一个非规范化列表,如下所示,但使用的列名与数据库上使用的不同:

  • 客户名称
  • 订购日期
  • 订单行号
  • 产品描述
  • 数量

【问题讨论】:

  • 已切换到使用 Dapper - 在 @Damith 的帮助下,将其排序 see here。 SS 和 Dapper 是一个很棒的组合!

标签: sql sql-server orm servicestack


【解决方案1】:

OrmLite 中,如果您需要执行复杂的查询或自定义联接,您可以随时回退到自定义 SQL,例如:

List<CustomerProductOrder> results = db.Select<CustomerProductOrder>(
  @"SELECT c.Name, o.Date, ol.Number, p.Desc, o.Qty
      FROM Order o INNER JOIN Customer c ON (o.CustomerId = c.Id) ...
     WHERE o.Id = {0}", 1001);

或者使用参数化查询,例如:

List<CustomerProductOrder> results = db.Query<CustomerProductOrder>(
  @"SELECT c.Name, o.Date, ol.Number, p.Desc, o.Qty
      FROM Order o INNER JOIN Customer c ON (o.CustomerId = c.Id)  ...
     WHERE o.Id = @orderId", new { orderId = 1001 });

其中CustomerProductOrder 是此查询的非规范化 POCO,它将使用结果集中的匹配列填充所有属性。

更多 OrmLite 查询示例可以在 OrmLite's API Overview 找到。

【讨论】:

  • 谢谢神话。 .Select 方法采用什么参数。文档与我收到的错误消息冲突:“使用通用方法 'System.Data.EnumerableRowCollectionExtensions.Select(System.Data.EnumerableRowCollection, System.Func)'需要 2 个类型参数”
  • 太棒了。谢谢@mythz,正是我所追求的。与Dapper 相同。
猜你喜欢
  • 2019-10-03
  • 1970-01-01
  • 2017-05-02
  • 2018-11-26
  • 2019-10-27
  • 2020-05-06
  • 2016-05-01
  • 2010-10-22
  • 2021-05-31
相关资源
最近更新 更多