流利; SessionSource或SessionFactory用于创建会话?

sti*_*k81 3 .net c# nhibernate session fluent-nhibernate

我正在使用NHibernate + Fluent来处理我的应用程序中的数据库.到目前为止,我一直在使用SessionSource来创建我的ISession对象.我现在对NHibernate或Fluent的内容感到有点困惑,以及我真正应该用来创建会话的内容.

ISession来自NHibernate,来自Fluent的SessionSource.我从FluentConfiguration创建SessionSource,并且当前使用SessionSource来创建会话.这是我创建会话的功能.重用FluentConfiguration和SessionSource:

if (_sessionSource == null)
{
    _cfg = Fluently.Configure().Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("test.db"));
    _sessionSource = new SessionSource(_cfg.BuildConfiguration().Properties, new MappingsPersistenceModel());
    var session = _sessionSource.CreateSession();
    _sessionSource.BuildSchema(session);
    return session;
}
return _sessionSource.CreateSession(); 
Run Code Online (Sandbox Code Playgroud)

这看起来合理吗?使用ISessionFactory创建会话听起来更有吸引力,所以我尝试使用一个.这来自NHibernate,所以我不知道这是不是问题,但是当我的会话是从ISessionFactory创建的时候它会失败.

// Done once: 
_sessionFactory = _cfg.BuildSessionFactory();

// Done each time a session is requested: 
_sessionFactory.OpenSession()
Run Code Online (Sandbox Code Playgroud)

使用这个我MappingException在使用会话时得到一个,说" 没有持久性:MyProject.Model.SomeModelClass ".

我应该继续使用SessionSource吗?或者我错过了有关ISessionFactory的内容?

sti*_*k81 5

问题似乎是SessionFactory不知道映射,因为它们只被提供给SessionSource.在流畅的配置中添加映​​射并从中获取工厂似乎有所帮助.这给了我看起来更好的解决方案.对于那些对此有更多经验的人来说,这看起来合情合理吗?

private static ISession CreateSession()
{
    if (_sessionFactory == null)
    {
        _sessionFactory = Fluently.Configure().
            Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("test.db")).
            Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>()).
            BuildSessionFactory();
    }
    return _sessionFactory.OpenSession();
}
Run Code Online (Sandbox Code Playgroud)