我最近开始使用 ServiceStack 及其 ORMLite 框架。我在谷歌上搜索并浏览了源代码,但找不到任何相关的东西。
使用 ORMLite 执行查询时,有什么方法可以选择特定列?类似的东西:Db.First<Model>(q => q.Id == someId, "Column1, Column2")
除非我错过了这个功能,否则我很惊讶之前没有人问过这个问题,因为这是优化数据库事务的经验法则之一。
我最近开始使用 ServiceStack 及其 ORMLite 框架。我在谷歌上搜索并浏览了源代码,但找不到任何相关的东西。
使用 ORMLite 执行查询时,有什么方法可以选择特定列?类似的东西:Db.First<Model>(q => q.Id == someId, "Column1, Column2")
除非我错过了这个功能,否则我很惊讶之前没有人问过这个问题,因为这是优化数据库事务的经验法则之一。
如果要指定表以外的列,则需要使用 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);
它只会从部分模型中选择 + 填充字段。
我确实试过这个:
写入对 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)
谢谢
我发现了问题。这是由于我的类中的字段(定义为字符串)和相应的 Oracle 字段(即 DATE)之间的类型匹配不正确。
我用 datetime 替换了字符串,并像一个魅力一样工作。
所以它与 VIEW 完美配合,这极大地简化了代码。
我遇到了类似的问题,但是我的解决方案有所不同。
我的 POCO 中有一个 int 属性。我的查询(来自 Oracle)为此属性返回空值。它导致引发异常并阻止对该行的进一步处理。结果是部分填充了 POCO。
解决方案是将类型更改为可为空的。
public int? mypropperty