【发布时间】:2018-09-10 15:09:38
【问题描述】:
我正在使用 FluentNHibernate 并尝试将 Environment.DefaultFlushMode 配置为 FlushMode.Commit
根据这个 SO question 应该是可能的: How to change default FlushMode to Commit in 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());
【问题讨论】:
-
貌似其他人也有类似的问题,而且这个方法工作了一段时间,后来在后续版本中被破解了(见cmets)stackoverflow.com/questions/968730/…
标签: c# .net nhibernate fluent-nhibernate