Che*_*rot 2 nhibernate fluent-nhibernate
我有一个复杂的实体,非常沉重.我想从数据库中仅选择此实体的ID和名称以获得更好的性能.我如何用nhibernate(或流利的nhibernate)做到这一点.
有几种不同的可能性.
创建一个新实体
一种可能的解决方案是创建一个新实体并将其映射到同一个表,但只映射您想要的列(id和name).这非常灵活,允许您将该实体用作任何其他实体.问题是你引入了一些重复.
使用HQL
另一种解决方案是使用投影.使用HQL,您可以使用select子句指定要检索的列.如果您希望将适当的实体实例作为查询的结果而不是对象数组,则可以为类创建自定义构造函数并在HQL查询中使用它.
session.CreateQuery("select new Foo(f.Id, f.Name) from Foo f").List<Foo>();
Run Code Online (Sandbox Code Playgroud)
使用Criteria API
如果要使用Criteria API而不是HQL,可以使用SetProjection方法.如果您想从查询中获取正确的实体而不是对象数组,则可以使用AliasToBean结果转换器.
session.CreateCriteria(typeof(Foo))
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("Name"), "Name")
.Add(Projections.Property("Id"), "Id"))
.SetResultTransformer(Transformers.AliasToBean(typeof(Foo)))
.List();
Run Code Online (Sandbox Code Playgroud)
标准示例代码借用了以下问题,这可能是有趣的: NHibernate - 仅在使用Critera查询时检索特定列?
| 归档时间: |
|
| 查看次数: |
1567 次 |
| 最近记录: |