Ole*_*jko 2 c# nhibernate fluent-nhibernate
所以……已经说过了:
在 C# 中如何更改FlushMode为Commit?
我的意思是,在 Fluent NHibernate FlushMode 默认设置为 Auto。
所以......要将 FluentMode 设置为Commit,我需要打开会话然后更改它:
var someSessionFactory = ... bla bla ..;
var session = someSessionFactory.OpenSession();
session.FlushMode = FlushMode.Commit;
Run Code Online (Sandbox Code Playgroud)
这会起作用,但是......这意味着我需要在FlushMode.Commit每次打开会话时调用包含的方法。为了初始化 sessionFactory,我有几个包装(意味着只设置一次,然后在打开新上下文时自动使用它),这意味着我不能每次都直接打开会话而不深入研究工厂类型等。
有没有办法将默认 FlushMode从 Auto更改为 Commit?有没有办法做到这一点var sessionFactory = Fluently.Configure(). ...?
编辑:
尝试第二件事
public void Initialise(params Assembly[] mappingAssemblies)
{
this._sessionFactory = Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2008
.ConnectionString(this._connectionString)
.AdoNetBatchSize(10)
.QuerySubstitutions("true 1, false 0, yes 'Y', no 'N'"))
.Cache(c => c.Not.UseSecondLevelCache().Not.UseQueryCache())
.Mappings(m =>
{
foreach (Assembly asm in mappingAssemblies)
{
m.FluentMappings.AddFromAssembly(asm);
m.HbmMappings.AddFromAssembly(asm);
}
})
.ExposeConfiguration(ModifyConfiguration)
.BuildSessionFactory();
var session = _sessionFactory.OpenSession();
}
public void ModifyConfiguration(NHibernate.Cfg.Configuration configuration)
{
configuration.Properties["default_flush_mode"] = FlushMode.Commit.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我打电话是_sessionFActory.OpenSession()想看看 FlushMode 是否已经改变,然后……不。仍然 FlushMode 是自动,而不是提交。
无法为 ISession 配置默认 FlushMode。我这样做的方式,以及可以找到的共同方式,是进入(IoC、MVC AOP 过滤器、Web API 委托)并分配 FlushModeISessionFactory.OpenSession() (manually)
var session = SessionFactory.OpenSession();
session.FlushMode = FlushMode.Commit;
Run Code Online (Sandbox Code Playgroud)
检查这些:
属性 ISession.FlushMode 定义如下:
public interface ISession : IDisposable
{
...
/// <summary>
/// Determines at which points Hibernate automatically flushes the session.
///
/// </summary>
///
/// <remarks>
/// For a readonly session, it is reasonable to set the flush mode
/// to <c>FlushMode.Never</c>
/// at the start of the session (in order to achieve some
/// extra performance).
///
/// </remarks>
FlushMode FlushMode { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是默认的实现片段:
public sealed class SessionImpl : ...
{
...
private FlushMode flushMode = FlushMode.Auto;
...
Run Code Online (Sandbox Code Playgroud)
是不是该ISessionFactory.OpenSession()调用期间无论如何设置。
原始的,不工作的方法
不支持记录的<hibernate-configuration>设置default_flush_mode。
因此,我们有这些配置属性可用于(默认/非流畅配置设置):<hibernate-configuration>
default_flush_mode- 默认FlushMode,默认为未指定,例如。
Unspecified | Never | Commit | Auto | Always
并基于例如这个问答:
Fluent NHibernate 中的 NHibernate 配置属性
我们可以做的:
Fluently.Configure()
.Database(ConfigureDatabase())
.Mappings(ConfigureMapping)
.ExposeConfiguration(ModifyConfiguration)
.BuildConfiguration();
...
private void ModifyConfiguration(Configuration configuration)
{
configuration.Properties["default_flush_mode"] = "Commit";
}
Run Code Online (Sandbox Code Playgroud)