7

我最近开始使用 ServiceStack 及其 ORMLite 框架。我在谷歌上搜索并浏览了源代码,但找不到任何相关的东西。

使用 ORMLite 执行查询时,有什么方法可以选择特定列?类似的东西:Db.First<Model>(q => q.Id == someId, "Column1, Column2")

除非我错过了这个功能,否则我很惊讶之前没有人问过这个问题,因为这是优化数据库事务的经验法则之一。

4

4 回答 4

7

如果要指定表以外的列,则需要使用 SQL,如前面的示例中所示

因此,在您的情况下,您可以执行以下操作:

Db.First<Model>("SELECT Column1, Column2 FROM AnyTableOrView");

[Alias]您还可以通过使用属性装饰来创建查看表格的部分模型,例如:

[Alias("AnyTableOrView")]
public class Model {
    public int Id { get; set; }
    public string Column1 { get; set; }
    public string Column2 { get; set; }
}

然后您可以执行以下操作:

Db.First<Model>(q => q.Id == someId);

它只会从部分模型中选择 + 填充字段。

于 2012-10-02T19:38:16.597 回答
2

我确实试过这个:

  1. 创建了一个数据库视图(表名和列已经设置)
  2. 创建了一个名为“Event”的类,并将该表的每个字段与一个属性匹配(我使用 [Alias] 作为表名,并且所有列都具有好听的名称)
  3. 写入对 DB 的访问以根据其 ID 选择 1 条记录

        var dbFactory = new OrmLiteConnectionFactory(
            "Data Source=MyDB;User Id=user;Password=pwd",  // Connection String
            OracleDialect.Provider);
    
        using (var db = dbFactory.OpenDbConnection())
        {
                var event = db.GetByIdOrDefault<Event>( request.Id );
        }
    

此时填充了 var 'event' 但仅填充了 Id 字段!该类的所有其他字段都未填充(虽然数据库中确实有数据)。

这是我能做的最简单的事情,但它不起作用。有任何想法吗 ?(PS:我正在使用 OrmLite for Oracle)

谢谢

于 2013-01-03T15:07:12.163 回答
1

我发现了问题。这是由于我的类中的字段(定义为字符串)和相应的 Oracle 字段(即 DATE)之间的类型匹配不正确。

我用 datetime 替换了字符串,并像一个魅力一样工作。

所以它与 VIEW 完美配合,这极大地简化了代码。

于 2013-01-03T16:09:25.060 回答
1

我遇到了类似的问题,但是我的解决方案有所不同。

我的 POCO 中有一个 int 属性。我的查询(来自 Oracle)为此属性返回空值。它导致引发异常并阻止对该行的进一步处理。结果是部分填充了 POCO。

解决方案是将类型更改为可为空的。

public int? mypropperty
于 2013-02-07T17:19:22.573 回答