2009-09-03 54 views
0

我是新来的NHibernate ...NHibernate的问题 - 修改这个例子功能NHibernate

我一直在关注从加布里埃尔辛克此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(); 

    } 

} 

回答

0

会话工厂通常应该只(使用singleton图案),用于该应用的生命周期来创建一次。

这里是示例代码创建与功能NHibernate会话工厂:

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

不使用流利的配置(从我的头顶,语法可能不准确):

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

var sessionFactory = config.BuildSessionFactory(); 
+0

谢谢 - 如果我想将配置保存在hibernate.cfg.xml中,但只需使用Fluent进行映射 - 我将如何在代码中执行此操作? – UpTheCreek 2009-09-03 18:12:28

+0

更新了答案,语法可能不准确,没有我的IDE在我面前 – mxmissile 2009-09-03 21:03:50