1、Nhibernate 的环境说明
在使用之前我自己的电脑环境是64位,64位的oracle,32位的客户端。所以报了一个错误。我在网上找到这个哥们的博客
,问题是一样的,情况也是一样的,我感觉可能是权限问题,我还在调试中。上面的问题一搜一大推解决方法
将项目生成改为x86的即可
2、传统方式创建ISessionFactory
这种传统的创建ISessionFactory的方法适用于前面的特性映射,xxx.hbm.xml映射文件这类的映射方式,但是Fluent这种映射方式需要不一样方法创建ISessionFactory,好我们现在先说传统的方式。
public class SessionFactory{ private static ISessionFactory sessionFactory { get; set; } public static ISessionFactory GetCurrentFactory() { if (sessionFactory == null) { sessionFactory = CreateSessionFactory(); } return sessionFactory; } private static ISessionFactory CreateSessionFactory() { return new Configuration().Configure().BuildSessionFactory(); //上一篇说了,如果你的配置文件不在根目录那么就需要手动的调用这个文件的位置 //Configuration cfg = new Configuration().Configure(filePath); } }
后面的用法void AddPost(){// initialize the configuration Configuration cfg = new Configuration();cfg.AddAssembly("NHClass"); ISessionFactory factory = cfg.BuildSessionFactory(); // start a session with the database// the ISession object represents a connection to your backend database ISession session = factory.OpenSession(); // the ITransaction object represents a NH Managed transaction// always start a transaction before u want to do something on the backend database ITransaction trans = session.BeginTransaction();// initialize ur Post Post post = new Post();post.PostID = Guid.NewGuid();post.Title = "hello Nibernate";post.Content = "foo test";post.Creator = "foo";post.LastUpdator = "bar";post.CreateDate = System.DateTime.Now.Date;post.LastUpdateDate = System.DateTime.Now.Date;// store the new post session.Save(post);// commit the transaction trans.Commit();// end the session session.Close();}
3、Fluent方式创建ISessionFactory
这部分写的时候需要写那个数据库主键选择策略
在创建的时候遇到一个问题
网上很多解决方法,有一种说法是这样的,不过我再测试好像不行
oh,困扰了一天的问题终于解决了,哎,看来这贴是发错地方了,竟然没人理。
ISessionFactory factory = Configuration.BuildSessionFactory();要在注册了实体以后调用,不然这个工厂创建出来的ISession是不认识这些持久化类的,哎,调试一天,最后才发现。。要
要注意更层之间的引用问题,别少引用了东西
4、传统方式和Fluent的对比
上面的演示相信大家都能看明白,两者之间的对比也比较明显的显露出来,传统的方式我们只需要编写正确的配置文件,相对比较灵活,一些修改的话都可以在配置 文件中进行更新,比如Mappings,而上面的代码,Fluent虽然使用代码的方式进行了配置,省去了配置文件,但灵活性却没有传统方式那么好,修改 一些配置的时候,我们得扩充我们的CreateSessionFactory的方法,不过Fluent更符合人类的思考行为,而且有VS这么强大IDE, 在编写代码的同时,能够享受强大的智能感知。
两者之间都各有长短,或许你还没有体会到Fluent的强大,在日后的Mappings时,你会慢慢了解为什么他会叫Fluent。传统方式对于一些经常 使用的程序员来说非常简便,加上代码生成工具,使用起来也会游刃有余,但对于新手来说,Fluent绝对是一个好帮手。
四、灵活的Fluent
那我们Fluent就没有办法灵活了吗?当然不,Fluent的开发者不仅帮你保留了原有的方式,还可以混合你的配置文件,最有意思的时,你还可以使用它 来学习NHibernate,甚至可以使用它来开发你自己的自动代码生成工具,因为我也刚学,先介绍一些简单的,至于其他功能,希望大家也能跟我一起学 习,体验Fluent带来的快感。
5支持的代码连接数据库的方式