NHibernate 如何实现 Func<T> 参数的赋值。
How does NHibernate achieve assignment of a Func<T> parameter.
给定如下:
Post posts = null;
Author author = null;
blog = session.QueryOver<Blog>()
.Where(x => x.Id == 1)
.JoinAlias(x => x.Posts, () => posts)
.JoinAlias(() => posts.Author, () => author)
.SingleOrDefault();
在 NHibernate 中,上述值可以传递给 JoinAlias
的第二个参数的变量
我试图解决这个问题,我得到的最接近的结果是将 Body 转换为 MemberExpression
,然后将表达式转换为 ConstantExpression
,但这会创建 .Value
,它是只读的,使用反射分配成员不会修改传入的引用。
NH 如何做到这一点?
没有。
这只是语法。 posts
和 author
都没有赋值。这些变量在这里只是为了允许在以后的限制中将它们用作别名,例如以下取自 here:
的示例
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => kittenAlias.Name == "Tiddles");
它允许 QueryOver
将所有内容转换为有效的 SQL 查询。 (我猜实际上是 HQL,然后转换为 SQL。)但是在执行之后,您应该会发现您的变量未受影响,并且仍然 null
.
给定如下:
Post posts = null;
Author author = null;
blog = session.QueryOver<Blog>()
.Where(x => x.Id == 1)
.JoinAlias(x => x.Posts, () => posts)
.JoinAlias(() => posts.Author, () => author)
.SingleOrDefault();
在 NHibernate 中,上述值可以传递给 JoinAlias
我试图解决这个问题,我得到的最接近的结果是将 Body 转换为 MemberExpression
,然后将表达式转换为 ConstantExpression
,但这会创建 .Value
,它是只读的,使用反射分配成员不会修改传入的引用。
NH 如何做到这一点?
没有。
这只是语法。 posts
和 author
都没有赋值。这些变量在这里只是为了允许在以后的限制中将它们用作别名,例如以下取自 here:
Cat catAlias = null; Kitten kittenAlias = null; IQueryOver<Cat,Cat> catQuery = session.QueryOver<Cat>(() => catAlias) .JoinAlias(() => catAlias.Kittens, () => kittenAlias) .Where(() => kittenAlias.Name == "Tiddles");
它允许 QueryOver
将所有内容转换为有效的 SQL 查询。 (我猜实际上是 HQL,然后转换为 SQL。)但是在执行之后,您应该会发现您的变量未受影响,并且仍然 null
.