• Nhibernate 使用 (二)


    在第一篇中该做的配置基本上已经全部完成,现在直接开始测试

     public static ISession NhibClient()
            {
                try
                {
    // Nhibernate 配置文件的位置
    var path=AppDomain.CurrentDomain.BaseDirectory + "../../xml/NHibernate.cfg.xml"; ISessionFactory sf
    = new Configuration().Configure(path).BuildSessionFactory(); ISession session = sf.OpenSession();//打开Session return session; } catch (Exception) { return null; } }

    数据表实体

        public class UserModel
        {
            public virtual int Id { get; set; }
            public virtual string UserName { get; set; }
            public virtual int Age { get; set; }
    
        }
                    var client = NhibInfo.NhibClient();
                    UserModel myUser = new UserModel { Id = 8, UserName = "dong", Age = 250 };
                    client.Update(myUser);
                    client.Flush();
                    Console.WriteLine("执行完成!");
    //查询 注意:from table 时,table不能是数据中表的名字,必须是数据库实体的名字
                    var list = client.CreateQuery("from UserModel where UserName='shanghai';").List<UserModel>();

     二:client.Flush();的作用

       1. ession flush在commit之前默认都会执行他。也可以手动执行它,他主要做了两件事

    1) 清理缓存。

    2) 执行SQL。

    session在什么情况下执行flush

    * 默认在事务提交时

    * 显示的调用flush

    * 在执行查询前,如:iterate

    2.在下面的情况下,Hibernate会调用Session.flush()以清理缓存:    
    1)事务提交时如果flush模式不为FlushMode.NEVER,commit()将调用flush().    
    2)在某些查询语句之前(此查询语句之前的语句已经改变了数据库状态,所以需要调用flush()以同步数据库是查出来的数据是经过更改的)。在调用Session.flush()时,涉及的SQL语句会按照下面的顺序执行。

    3.在调用Session.flush()时,涉及的SQL语句会按照下面的顺序执行。
    (1所有的实体进行插入的语句,其顺序按照对象执行Session.save()的时间顺序。
    (2)所有对实体进行更新的语句
    (3)所有进行集合的删除语句
    (4)所有对集合元素进行删除,更新或者插入的语句
    (5)所有进行集合插入的语句
    (6)所有对实体进行删除的语句,其顺序按照对象执行Session.delete()的时间顺序。

    (7)有一个例外是,如果对象使用native方式生成的ID(持久化标识),则他们一执行save就会被插入。除非明确地指定了flush()命令,否则关于Session何时会执行这些JDBC调用完全是无法保证的,只能保证他们执行的前后顺序。

    参考来源:http://blog.csdn.net/dingxingmei/article/details/9022597

  • 相关阅读:
    mysql学习【第4篇】:数据库之数据类型
    mysql学习【第3篇】:数据库之增删改查操作
    mysql学习【第2篇】:基本操作和存储引擎
    mysql学习【第1篇】:数据库安装
    模块
    面向对象 之 反射 内置方法
    面向对象 的属性 类方法 静态方法
    python day
    day 18 面向对象的 继承
    python day
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/7992454.html
Copyright © 2020-2023  润新知