• 跟我学 NHibernate (一)


     NHibernate 是一个强大的 ORM 框架,本博文主要就 NHibernate 的使用方法及语法做一些简单的介绍。
     
     1.NHibernate 语法
     
      新建一个类,命名为: QueryCriteriaAPI, 并创建构造函数

            private ISession _session;
            public ISession Session
            {
                set
                {
                    _session = value;
                }
            }
            public QueryCriteriaAPI(ISession session)
            {
                _session = session;
            }
    
        #region 语法学习
            /// <summary>
            /// 创建ICriteria实例
            /// </summary>
            /// <returns></returns>
            public IList<Customer> CreateCriteria()
            {
                //NHibernate.ICriteria这个接口代表对一个特定的持久化类的查询。
                //ISession是用来制造Criteria实例的工厂。
                var crit = _session.CreateCriteria(typeof(Customer));
                crit.SetMaxResults(50);
                var customers = crit.List<Customer>();
                return customers;
            }
            /// <summary>
            /// 缩小结果集范围
            /// </summary>
            /// <returns></returns>
            public IList<Customer> Narrowing()
            {
                //一个查询条件(Criterion)是NHibernate.ICriterion接口的一个实例。
                //类NHibernate.Expression.Expression定义了获得一些内置的ICriterion类型的工厂方法。
    
    
                var customers = _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Like("Firstname", "YJing%"))
                    .Add(Restrictions.Between("Lastname", "A%", "Y%"))
                    .List<Customer>();
    
                //表达式(Expressions)可以按照逻辑分组
                //IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
                //    .Add(Restrictions.Like("Firstname", "YJ%"))
                //    .Add(Restrictions.Or(
                //    Restrictions.Eq("Lastname", "L%"),
                //    Restrictions.IsNull("Lastname")
                //    ))
                //    .List<Customer>();
    
                //IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
                //    .Add(Restrictions.In("Firstname", new string[] { "YJing", "YJingLee", "Y" }))
                //    .Add(Restrictions.Disjunction()
                //    .Add(Restrictions.IsNull("Lastname"))
                //    .Add(Restrictions.Eq("Lastname", "Lee"))
                //    .Add(Restrictions.Eq("Lastname", "xyz"))
                //    ).List<Customer>();
    
                //预制的条件类型(Expression的子类)。可以直接嵌入SQL。
                //{alias}是一个占位符,它将会被所查询实体的行别名所替代
                //Parameter paramName = new Parameter("someName", new StringSqlType());
                //IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
                //    .Add(Expression.Sql(
                //      new SqlString(new object[]{
                //          "lower({alias}.Lastname) like lower(","Lastname",")"}), "YJing%", NHibernateUtil.String))
                //          .List<Customer>();
                return customers;
            }
            /// <summary>
            /// 排序Order by
            /// </summary>
            /// <returns></returns>
            public IList<Customer> Order()
            {
                //使用ICriteria.Order对结果集排序,true=asc,false=desc
                return _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Like("Firstname", "Y%"))
                    .AddOrder(new NHibernate.Criterion.Order("Lastname", true))
                    .AddOrder(new NHibernate.Criterion.Order("Firstname", false))
                    .List<Customer>();
            }
            #endregion
    

     2. 实例学习

            #region 实例学习
            /// <summary>
            /// 利用CriteriaAPI按Firstname查询顾客
            /// </summary>
            /// <param name="firstname"></param>
            /// <returns>顾客列表</returns>
            public IList<Customer> UseCriteriaAPI_GetCustomersByFirstname(string firstname)
            {
                //NHibernate1.2写法
                //return _session.CreateCriteria(typeof(Customer))
                //    .Add(new NHibernate.Expression.EqExpression("Firstname", firstname))
                //    .List<Customer>();
    
                //NHibernate2.0写法
                //return _session.CreateCriteria(typeof(Customer))
                //    .Add(Expression.Eq("Firstname", firstname))
                //    .List<Customer>();
                //使用Name封装:.Add(Restrictions.Eq("Name.Firstname", firstname))
                return _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Eq("Firstname", firstname))
                    .List<Customer>();
            }
            /// <summary>
            /// 利用CriteriaAPI按Firstname和Lastname查询顾客
            /// </summary>
            /// <param name="firstname"></param>
            /// <param name="lastname"></param>
            /// <returns></returns>
            public IList<Customer> UseCriteriaAPI_GetCustomersByFirstnameAndLastname(string firstname, string lastname)
            {
                //NHibernate1.2写法
                //return _session.CreateCriteria(typeof(Customer))
                //    .Add(new NHibernate.Expression.EqExpression("Firstname", firstname))
                //    .Add(new NHibernate.Expression.EqExpression("Lastname", lastname))
                //    .List<Customer>();
    
                //NHibernate2.0写法
                //使用Name封装:.Add(Restrictions.Eq("Firstname", firstname))
                return _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Eq("Firstname", firstname))
                    .Add(Restrictions.Eq("Lastname", lastname))
                    .List<Customer>();
            }
            /// <summary>
            /// 利用CriteriaAPI获取顾客ID大于CustomerId的顾客
            /// </summary>
            /// <param name="customerId">顾客ID</param>
            /// <returns>顾客列表</returns>
            public IList<Customer> UseCriteriaAPI_GetCutomersWithIdGreaterThan(int customerId)
            {
                //NHibernate1.2写法
                //return _session.CreateCriteria(typeof(Customer))
                //    .Add(new NHibernate.Expression.GtExpression("CustomerId", customerId))
                //    .List<Customer>();
    
                //NHibernate2.0写法
                return _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Gt("CustomerId", customerId))
                    .List<Customer>();
            }
            #endregion
    

     由于时间的仓促,这里粘贴了主要的代码片段


     

  • 相关阅读:
    基于硬件的毕业设计论文的书写
    C语言程序设计课程总结
    嵌入式程序设计第三周成绩汇总
    C第十八次课
    2016-4班平时成绩第9周排名和汇总
    2016-3班平时成绩第9周汇总和排名
    第十七次课大纲
    第十六次课大纲
    2020-02-28
    2020-02-27
  • 原文地址:https://www.cnblogs.com/wisdo/p/4374384.html
Copyright © 2020-2023  润新知