gpt4 book ai didi

c# - 流利;用于创建 session 的 SessionSource 或 SessionFactory?

转载 作者:行者123 更新时间:2023-11-30 13:42:47 30 4
gpt4 key购买 nike

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

ISession 来自 NHibernate,SessionSource 来自 Fluent。我从 FluentConfiguration 创建 SessionSource,目前使用 SessionSource 创建 session 。这是我创建 session 的功能。 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();

这看起来合理吗?不过,使用 ISessionFactory 创建 session 听起来更有吸引力,所以我尝试使用一个。这来自 NHibernate,所以我不知道这是否是问题的原因,但是当我的 session 是从 ISessionFactory 创建时它失败了。

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

// Done each time a session is requested:
_sessionFactory.OpenSession()

使用这个我在使用 session 时得到一个 MappingException,说“No persister for: MyProject.Model.SomeModelClass”。

我应该继续使用 SessionSource 吗?还是我遗漏了有关 ISessionFactory 的内容?

最佳答案

问题似乎是 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();
}

关于c# - 流利;用于创建 session 的 SessionSource 或 SessionFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2019492/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com