NHibernate之Load和Get的区别

一。Load方法

  1. Load()方法可以对查询方法进行优化
  2. Load()方法实际得到的是一个proxy对象,并没立即查询数据库,只有对对象的属性进行访问时,才查询数据库。在NHibernate中,被称为Laze Loading(延迟加载)
  3. Load()方法得到的对象,如果对象不存在,访问对象的属性,会报异常
  4. 当需要使用实体对象,而又不需要访问对象属性时,宜使用Load()方法,如Delete

  如下图,load()只加载了一个代理对象,并没有访问数据库

using (ITransaction rs = session.BeginTransaction())
                {
                    TplCustomer tplCustomer = new TplCustomer() 
                    {
                        FirstName="孙悟空",
                        LastName="KIng"
                    };
                    //session.Save(tplCustomer);
                    
                    var model = session.Load<TplCustomer>(150228);
                    session.Close();
                }

当访问对象的属性,或Delete的时候,才会去查询数据库。

 1 using (ITransaction rs = session.BeginTransaction())
 2                 {
 3                     TplCustomer tplCustomer = new TplCustomer() 
 4                     {
 5                         FirstName="孙悟空",
 6                         LastName="KIng"
 7                     };
 8                     //session.Save(tplCustomer);
 9                     
10                     var model = session.Load<TplCustomer>(150228);
11                     Console.WriteLine(model.FirstName);//访问load加载的对象属性,前提时对象不能为空,否在异常。
12                     session.Close();
13                 }

二。get()方法

  Get()方法,立即查询数据库,如果数据不存在,返回为空。

猜你喜欢

转载自www.cnblogs.com/king-tao/p/13388587.html