NHibernate的投影:如何使用与投影的标准API来获取一个类型的类型
-
20-09-2019 - |
题
List<object[]> products = GetSession().CreateCriteria<Product>()
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("Id"))
.Add(Projections.Property("Name"))
.Add(Projections.Property("Price"))
)
.List();
public class ProductRow { public int Id { get; set; } public string Name { get; set; } public double Price { get; set; } }
我怎样才能得到的结果作为List
我看到有一个功能Projection.Cast,但我没有看到关于如何使用它的任何文件。
解决方案
您可以尝试设置结果变压器:
var result = GetSession()
.CreateCriteria<Product>()
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("Id"), "Id")
.Add(Projections.Property("Name"), "Name")
.Add(Projections.Property("Price"), "Price")
)
.SetResultTransformer(Transformers.AliasToBean<ProductRow>())
.List<ProductRow>();
请注意将每个投影时指向ProductRow
的属性名称别名的使用。
其他提示
我还没有能找到一个解决这个问题的具体。我发布一个类似的问题,前几天。 (http://stackoverflow.com/questions/3921457/nhibernate-entity-access-through-projection)的错误信息是监守NHibernate的是寻找你的产品类名为类别属性。我认为没有一个。该ONY工作,我身边已经能够迄今为止发现使用DTO。同时,使用表达式树,Lambda表达式和或ExpressionSelector寻找更深的动态DTO发电机和动态的LINQ to NHibernate的。所有这一切都似乎比较复杂。我希望有设置实体dynamiclly,即一个简单的解决方案投影。
不隶属于 StackOverflow