ServiceStack ORMLite - 选择列

时间:2012-10-02 18:41:31

标签: ormlite-servicestack

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

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

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

4 个答案:

答案 0 :(得分:7)

如果要指定表所需的其他列,则需要将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);

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

答案 1 :(得分:2)

我试过这个:

  1. 创建了数据库视图(已设置表名和列)
  2. 创建一个名为“Event”的类,并使用属性匹配该表的每个字段 (我使用[别名]表名,所有列都有好名字)
  3. 写入数据库访问权限,根据其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 );
        }
    
  4. 此时填充了var'event',但只填充了Id字段! 该类的所有其他字段都未填充(而数据库中确实存在数据)。

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

    由于

答案 2 :(得分:1)

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

我用datetime替换了字符串,就像魅力一样。

因此它与VIEW完美配合,可以极大地简化代码。

答案 3 :(得分:1)

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

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

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

public int? mypropperty