2012-10-02 77 views
7

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

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

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

+0

嗨cobolstinks,并感谢您的答案。我想你是在谈论Java版本,它是为了在移动设备上运行。我实际上指的是ServiceStack.ORMLite框架,它是一个C#端口,用于ASP.Net应用程序 – Alexis

+0

yeap我不好,我指的是ormlite,并与ADK一起使用它。我删除了我原来的评论。 – cobolstinks

回答

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

而且它只会SELECT +填充部分模型中的字段。

+0

我正在使用你描述的第一种方式,但你的第二种方法是更干净。感谢并保持良好的工作。 – Alexis

+0

np和谢谢:) – mythz

+0

只是万一有人想知道,如果你别名你的Id属性,你也必须在你用于查询的剥离模型中别名。 – Alexis

2

我也试试这个:

  1. 创建一个数据库视图(表名和列已设置)
  2. 创建了一个名为“事件”和class匹配该表中的每个字段与属性 (我用[别名]对表的名称和所有列有很好的名字)
  3. 写访问DB基于它的ID

    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. 选择1项纪录

在这一点,var'event'被填充,但只有Id字段被填充! 该类的所有其他字段未填充(而数据库中确实存在数据)。

这是最简单的我可以做,它不工作。有任何想法吗 ? (PS:我使用OrmLite用于Oracle)

感谢

1

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

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

因此,它与VIEW完美协作,这大大简化了代码。

1

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

我在我的POCO中有一个int属性。我的查询(来自Oracle)对此属性返回null。它导致异常被提出并阻止该行的进一步处理。 结果是部分人口稠密的POCO。

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

public int? mypropperty