NH5—NHibernate的ISessionFactory的创建

本文详细介绍了NHibernate的环境配置、SessionFactory的两种创建方式(传统方式和Fluent方式),并对比了两者的特点。此外,文章还讨论了如何在实际应用中灵活使用NHibernate,包括解决权限问题和避免层间引用问题。最后,提供了灵活运用Fluent方式的实例,并解释了如何在开发过程中使用Fluent来提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Nhibernate 的环境说明

在使用之前我自己的电脑环境是64位,64位的oracle,32位的客户端。所以报了一个错误。我在网上找到这个哥们的博客

http://www.cnblogs.com/joey0210/archive/2012/08/15/2640248.html ,问题是一样的,情况也是一样的,我感觉可能是权限问题,我还在调试中。上面的问题一搜一大推解决方法

将项目生成改为x86的即可

153159_ydnK_1416844.jpg


140033_9YnC_1416844.jpg

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


这部分写的时候需要写那个数据库主键选择策略

在创建的时候遇到一个问题

232222_erwB_1416844.jpg

网上很多解决方法,有一种说法是这样的,不过我再测试好像不行

oh,困扰了一天的问题终于解决了,哎,看来这贴是发错地方了,竟然没人理。

ISessionFactory  factory = Configuration.BuildSessionFactory();
要在注册了实体以后调用,不然这个工厂创建出来的ISession是不认识这些持久化类的,哎,调试一天,最后才发现。。        

http://bbs.youkuaiyun.com/topics/330269091  要

要注意更层之间的引用问题,别少引用了东西

4、传统方式和Fluent的对比

     上面的演示相信大家都能看明白,两者之间的对比也比较明显的显露出来,传统的方式我们只需要编写正确的配置文件,相对比较灵活,一些修改的话都可以在配置 文件中进行更新,比如Mappings,而上面的代码,Fluent虽然使用代码的方式进行了配置,省去了配置文件,但灵活性却没有传统方式那么好,修改 一些配置的时候,我们得扩充我们的CreateSessionFactory的方法,不过Fluent更符合人类的思考行为,而且有VS这么强大IDE, 在编写代码的同时,能够享受强大的智能感知。

     两者之间都各有长短,或许你还没有体会到Fluent的强大,在日后的Mappings时,你会慢慢了解为什么他会叫Fluent。传统方式对于一些经常 使用的程序员来说非常简便,加上代码生成工具,使用起来也会游刃有余,但对于新手来说,Fluent绝对是一个好帮手。

四、灵活的Fluent

     那我们Fluent就没有办法灵活了吗?当然不,Fluent的开发者不仅帮你保留了原有的方式,还可以混合你的配置文件,最有意思的时,你还可以使用它 来学习NHibernate,甚至可以使用它来开发你自己的自动代码生成工具,因为我也刚学,先介绍一些简单的,至于其他功能,希望大家也能跟我一起学 习,体验Fluent带来的快感。


5支持的代码连接数据库的方式

image


转载于:https://my.oschina.net/u/1416844/blog/373915

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值