开发者

How does NHibernate 3 solve the QueryOver<> syntax?

I'm curious on how the NHibernate team has solved the QueryOver syntax, so that it works with intellisense and validation at compile time?

Accord开发者_如何转开发ing to http://nhforge.org/blogs/nhibernate/archive/2009/12/17/queryover-in-nh-3-0.aspx they make use of extension methods and lambda expressions, but I've tried looking through the source but it doesn't really explains it fully to me.

How do they make them type safe, at compile time, without the need for any proxy classes that extends them?

I would like to "copy" this behavior but for that I need some basic understanding of the concept, any pointers to documentation on the subject is also welcome.


Much like any LINQ implementation, QueryOver uses Expression trees manipulation at runtime. In particular, see the ExpressionProcessor class, it has a dictionary that maps Expressions to functions that apply ICriteria.

QueryOver also uses fluent interface techniques. For example, when calling OrderBy it returns a IQueryOverOrderBuilder, which clearly defines what operations are available when ordering. Similarly, there's a IQueryOverRestrictionBuilder type that defines available methods on restrictions. This is in contrast to many simpler fluent interface implementations that always return this to allow method concatenation.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜