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

 

posted @ 2017-12-06 14:19  逍遥帝君  阅读(701)  评论(0编辑  收藏  举报