zoukankan      html  css  js  c++  java
  • 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()方法,立即查询数据库,如果数据不存在,返回为空。

  • 相关阅读:
    迁移学习综述
    分析 Kaggle TOP0.1% 如何处理文本数据
    软件工程提问回顾与个人总结
    洛谷 4219/BZOJ 4530 大融合
    洛谷 1486/BZOJ 1503 郁闷的出纳员
    【模板】文艺平衡树
    【模板】树套树(线段树套Splay)
    【模板】可持久化线段树
    【模板】可持久化平衡树
    【模板】左偏树
  • 原文地址:https://www.cnblogs.com/king-tao/p/13388587.html
Copyright © 2011-2022 走看看