Jon*_*onn 1 nhibernate-3 queryover
到目前为止,我知道局部变量或局部属性可以用作别名
ClassA _aliasA;
_session.QueryOver(x => x.ClassA, () => _aliasA);
Run Code Online (Sandbox Code Playgroud)
要么
ClassA AliasA { get; set; }
_session.QueryOver(x => x.ClassA, () => AliasA);
Run Code Online (Sandbox Code Playgroud)
我想知道其他选项是可行的.比如,外部类的属性是有效选项吗?
class ClassGenericAliases
{
ClassA Class { get; set; }
}
_session.QueryOver(x => x.ClassA, () => ClassGenericAliases.ClassA);
Run Code Online (Sandbox Code Playgroud)
静态可以用作别名吗?是否还有其他声明别名的选项?
我建议永远不要在使用别名的方法范围之外的别名中使用任何东西.
QueryOver是Criteria的强类型版本,在Criteria中,别名是字符串值.
IList cats = sess.CreateCriteria(typeof(Cat))
.CreateAlias("Kittens", "kt")
.CreateAlias("Mate", "mt")
.Add( Expression.EqProperty("kt.Name", "mt.Name") )
.List();
Run Code Online (Sandbox Code Playgroud)
但现在它需要将别名分配给变量,所以我们只为它创建一个:
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => catAlias.Age > 5)
.And(() => kittenAlias.Name == "Tiddles");
Run Code Online (Sandbox Code Playgroud)
从NHForge文档中,它说如下:
http://nhibernate.info/doc/nh/en/index.html#queryqueryover-aliases
15.5.别名
在传统的ICriteria接口中,使用"魔术字符串"分配别名,但是它们的值与对象域中的名称不对应.例如,当使用.CreateAlias("Kitten","kittenAlias")分配别名时,字符串"kittenAlias"不对应于域中的属性或类.
在QueryOver中,使用空变量分配别名.变量可以在任何地方声明(但在运行时应该为null).然后,编译器可以检查针对变量的语法是否正确使用,但是在运行时,不评估变量(它仅用作别名的占位符).
QueryOver中的每个Lambda表达式函数都有一个相应的重载以允许使用别名,而一个.JoinAlias函数可以使用别名遍历关联而不创建子QueryOver.
所以坚持只使用方法范围内的变量.
归档时间: |
|
查看次数: |
11364 次 |
最近记录: |