我最近开始使用ServiceStack及其ORMLite框架。我在Google上搜索并浏览了源代码,但找不到任何相关内容。
使用ORMLite执行查询时,有没有办法选择特定的列?
类似的东西:Db.First<Model>(q => q.Id == someId, "Column1, Column2")
除非我错过了这个功能,否则我很惊讶之前没有人问过这个问题,因为这是优化数据库交易的一个规则。
答案 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)
我试过这个:
写入数据库访问权限,根据其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)
由于
答案 2 :(得分:1)
我发现了这个问题。 这是由于我的类中的字段(定义为字符串)与相应的Oracle字段(即DATE)之间的类型匹配不正确。
我用datetime替换了字符串,就像魅力一样。
因此它与VIEW完美配合,可以极大地简化代码。
答案 3 :(得分:1)
我遇到了类似的问题,但我的解决方案却有所不同。
我的POCO中有一个int属性。我的查询(来自Oracle)为此属性返回null。它引发了异常,并阻止了对该行的进一步处理。 结果是部分填充的POCO。
解决方案是将类型更改为可为空。
public int? mypropperty