gpt4 book ai didi

nhibernate - NHibernate 中的投影

转载 作者:行者123 更新时间:2023-12-04 13:03:24 30 4
gpt4 key购买 nike

假设在一个实体中有属性 id、用户名、年龄、地址。现在我只想要 id 和 username 并使用此代码。

投影可以从查询中返回实体列表以外的内容。

var proj = Projections.ProjectionList()
.Add(Projections.Property("Id"), "Id")
.Add(Projections.Property("Username"), "Username");

var list2 = DetachedCriteria.For<User>()
.Add(Expression.Eq("Username", "lachlan"))
.GetExecutableCriteria( sessionFactory.GetCurrentSession())
.SetProjection( proj )
.List();

我将如何检索这些值。将在哪个对象中获取这些值。

最佳答案

除非使用结果转换器,否则投影将生成具有投影值的匿名对象列表。这对于数据绑定(bind)来说已经足够了。

对于其他用途,您想要设置一个结果转换器,它将创建已知类型的对象。 AliasToBeanTransformer将为每一行创建一个指定类型的对象,并将其属性设置为行值。

如果您知道结果的类型,则可以使用通用 List<T>()方法。

var proj = Projections.ProjectionList()
.Add(Projections.Property("Id"), "Id")
.Add(Projections.Property("Username"), "Username");

var list2 = DetachedCriteria.For<User>()
.Add(Expression.Eq("Username", "lachlan"))
.GetExecutableCriteria( sessionFactory.GetCurrentSession())
.SetProjection( proj )
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();

结果转换器也可用于 SQL 和 HQL 查询。
list2 = Session.CreateSQLQuery("select Id, Username from user_table")
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();

list2 = Session.CreateQuery("select Id, Username from User")
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();

在这些示例中,Result 类不需要是映射类,并且必须具有选定的属性。
partial class Result
{
public int Id { get; set; }
public string Username { get; set; }
}

关于nhibernate - NHibernate 中的投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2207329/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com