CreateAlias 与 CreateCriteria的区别

   在NHibernate里面查很常用。CreateAlias 返回值还是当前的Criteria,但是CreateCriteria返回的新的Criteria。

Main

基本用法 如下。

var cri = session.CreateCrieria(typeof(User)) 
       .CreateCriteria("Roles") 
       .Add(Restrictions.Eq("RoleName","admin");


var cri = session.CreateCrieria(typeof(User)) 
       .CreateAlias("Roles","role") 
       .Add(Restrictions.Eq("role.RoleName","admin");
 
现在我除了想查role是admin的用户外,也想查出UserName名字叫做Joe的用户,那么他们就有区别
 
var cri = session.CreateCrieria(typeof(User))
       .Add(Restrictions.Eq("UserName", "Joe")
       .CreateCriteria("Roles") 
       .Add(Restrictions.Eq("RoleName","admin");

//第一种写法
var cri = session.CreateCrieria(typeof(User))
       .Add(Restrictions.Eq("UserName", "Joe") //紧贴着User
       .CreateAlias("Roles","role") 
       .Add(Restrictions.Eq("role.RoleName","admin"); 
//第二种写法。
var cri = session.CreateCrieria(typeof(User))
       .CreateCriteria("Roles") 
       .Add(Restrictions.Eq("RoleName","admin");
       .Add(Restrictions.Eq("UserName", "Joe") //

根据ayende 说,是生成的sql效率是一样的,不过原来的blog已经找不到了。
原文地址:https://www.cnblogs.com/fantasylu/p/1747053.html