【问题标题】:NHibernate questions - modifying this example for Fluent NHibernateNHibernate 问题 - 为 Fluent NHibernate 修改此示例
【发布时间】:2013-08-17 01:25:23
【问题描述】:

我是 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();

    }

}

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    在应用的生命周期内,会话工厂通常只能创建一次(使用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();
    

    【讨论】:

    • 谢谢 - 如果我想将配置保留在 hibernate.cfg.xml 中,但只使用 Fluent 进行映射 - 我将如何在您的代码中执行此操作?
    • 更新了答案,语法可能不准确,不要把我的IDE放在我面前
    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多