NHibernate的问题 - 为Fluent NHibernate修改这个例子

时间:2009-09-03 17:55:44

标签: nhibernate fluent-nhibernate

我是NHibernate的新手......

我一直在关注Gabriel Schenker的NHibernate教程: http://nhforge.org/wikis/howtonh/your-first-nhibernate-based-application.aspx

但是,本教程使用hbm文件。我想知道 - 我需要做些什么来修改下面的hepler类(创建一个会话工厂),以便它使用我的ClassMap文件而不是hbm?

此外,这是处理工厂创建的最佳方式吗?在这个例子中创建工厂的频率是多少 - 每次请求一次? (在这种情况下,我不确定我理解_sessionFactory的生命周期。)

谢谢!

public class NHibernateHelper

{

    private static ISessionFactory _sessionFactory;

    private static ISessionFactory SessionFactory

    {

        get

        {

            if(_sessionFactory == null)

            {

                var configuration = new Configuration();

                configuration.Configure();

                configuration.AddAssembly(typeof(Product).Assembly);

                _sessionFactory = configuration.BuildSessionFactory();

            }

            return _sessionFactory;

        }

    }



    public static ISession OpenSession()

    {

        return SessionFactory.OpenSession();

    }

}

1 个答案:

答案 0 :(得分:0)

会话工厂通常只应在应用的生命周期内创建一次(使用singleton模式)。

以下是使用Fluent Nhibernate创建SessionFactory的示例代码:

var mssqlConfig = MsSqlConfiguration
                .MsSql2008
                .ConnectionString(c => c.Is(connectionstring))
                .UseOuterJoin()
                .ProxyFactoryFactory("NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle");

var sessionFactory = Fluently.Configure()
                .Database(mssqlConfig)
                .Mappings(m => m.FluentMappings.AddFromAssembly(typeof(Product).Assembly))
                .BuildSessionFactory();

不使用Fluent Config(从我的头脑中,语法可能不准确):

var config = new NHibernate.Cfg.Configuration().Configure();
var model = new PersistenceModel();
 model.Configure(config);
 model.AddMappingsFromAssembly(typeof(Product).Assembly);

var sessionFactory = config.BuildSessionFactory();