Я использую FluentNHibernate и пытаюсь настроить Environment.DefaultFlushMode
на FlushMode.Commit
В соответствии с этим вопросом SO это должно быть возможно:
Как изменить FlushMode по умолчанию на Commit в C #?
Действительно, эта функция была добавлена https://nhibernate.jira.com/browse/NH-3619
Вот как я это использую:
public ISessionFactory BootstrapSessionFactory()
{
return Fluently.Configure()
.ExposeConfiguration(cfg =>
cfg.SetProperty(Environment.DefaultFlushMode, FlushMode.Commit.ToString()))
.BuildSessionFactory();
}
Согласно исходному коду FluentConfiguration
public FluentConfiguration ExposeConfiguration(Action<Configuration> config)
{
if (config != null)
{
this.configAlterations.Add(config);
}
return this;
}
public Configuration BuildConfiguration()
{
try
{
MappingConfiguration mappingConfiguration = new MappingConfiguration(this.logger);
foreach (Action<MappingConfiguration> mappingsBuilder in this.mappingsBuilders)
{
mappingsBuilder(mappingConfiguration);
}
mappingConfiguration.Apply(this.Configuration);
if (this.cache.IsDirty)
{
this.Configuration.AddProperties(this.cache.Create());
}
foreach (Action<Configuration> configAlteration in this.configAlterations)
{
configAlteration(this.Configuration);
}
Я вижу, что мои изменения конфигурации применяются при отладке
Однако, когда я на самом деле проверяю session.FlushMode
на сессию, построенную с использованием этого sessionFactory
, я получаю другие FlushMode
, которые я не установил.
Чего мне не хватает? Что я делаю не так?
Большое спасибо!
PS: используются версии библиотек:
<PackageReference Include="FluentNHibernate" Version="2.1.2" />
<PackageReference Include="NHibernate" Version="5.1.3" />
Обновление:
Углубившись немного глубже, я вижу, что код выше действительно правильно устанавливает SessionFactory.DefaultFlushMode
, однако этот режим сброса не применяется к сеансу
Вот так я получаю ISession
и ISessionFactory
public static void Install(IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<PersistenceSetup>();
// ISessionFactory
serviceCollection.AddSingleton(provider => provider.GetService<PersistenceSetup>().BootstrapSessionFactory());
// ISession
serviceCollection.AddTransient(provider => provider.GetService<ISessionFactory>().OpenSession());
И, как результат, режимы сброса отличаются при отладке: