【问题标题】:ServiceStack ORMLite - Select columnsServiceStack ORMLite - 选择列
【发布时间】:2012-10-02 18:41:30
【问题描述】:

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

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

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

【问题讨论】:

  • 您好 cobolstinks,感谢您的回答。我认为您在谈论旨在在移动设备上运行的 Java 版本。我实际上指的是 ServiceStack.ORMLite 框架,它是一个用于 ASP.Net 应用程序的 C# 端口
  • 是的,我指的是 ormlite 并与 ADK 一起使用它。我删除了我原来的评论。

标签: ormlite-servicestack


【解决方案1】:

如果要指定表以外的列,则需要使用 SQL 为seen in this earlier example

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

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);

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

【讨论】:

  • 我使用的是您描述的第一种方法,但您的第二种方法更清洁。谢谢,继续努力。
【解决方案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)

谢谢

【讨论】:

    【解决方案3】:

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

    我用 datetime 替换了字符串,效果很好。

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

    【讨论】:

      【解决方案4】:

      我有类似的问题,但我的解决方案不同。

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

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

      public int? mypropperty
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多