gpt4 book ai didi

c# - 如何在 C# 中将默认的 FlushMode 更改为 Commit?

转载 作者:行者123 更新时间:2023-11-30 19:57:18 25 4
gpt4 key购买 nike

所以...已经说过了:

如何在 C# 中将 FlushMode 更改为 Commit

我的意思是,在 Fluent NHibernate 中,FlushMode 默认设置为 Auto。

所以...要将 FluentMode 设置为Commit,我需要打开 session 然后更改它:

var someSessionFactory = ... bla bla ..;
var session = someSessionFactory.OpenSession();
session.FlushMode = FlushMode.Commit;

这会起作用,但是......这意味着我需要在每次打开 session 时调用包含 FlushMode.Commit 的方法。为了初始化 sessionFactory,我有几个包装(意味着只设置一次,然后在打开新上下文时自动使用它),这意味着我不能每次都直接打开 session 而不深入研究工厂类型等。

有没有办法将默认的FlushMode从自动更改为提交?有没有办法在 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();
}

我调用了 _sessionFActory.OpenSession() 来查看 FlushMode 是否已更改并且...没有。 FlushMode 仍然是 Auto,而不是 Commit。

最佳答案

无法为 ISession 配置默认的 FlushMode。我这样做的方式,以及可以找到的共同方式,是进入 ISessionFactory.OpenSession() (IoC、MVC AOP 过滤器、Web API 委托(delegate)) 并分配 FlushMode (manually)

var session = SessionFactory.OpenSession();
session.FlushMode = FlushMode.Commit;

检查这些:

属性 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; }

这是默认的实现片段:

public sealed class SessionImpl : ...
{
...
private FlushMode flushMode = FlushMode.Auto;
...

在 ISessionFactory.OpenSession() 调用期间设置。

原始的,不是工作的方法

记录 <hibernate-configuration> 设置 default_flush_mode不支持。

因此,我们为 <hibernate-configuration> 提供了这些配置属性 (默认/不流畅的配置设置):

<罢工> 3.5. Optional configuration properties

  • default_flush_mode - The default FlushMode, defaults to Unspecified eg.
    • Unspecified | Never | Commit | Auto | Always

基于例如关于这个问答:

NHibernate config properties in Fluent NHibernate

我们可以做到:

Fluently.Configure()
.Database(ConfigureDatabase())
.Mappings(ConfigureMapping)
.ExposeConfiguration(ModifyConfiguration)
.BuildConfiguration();

...

private void ModifyConfiguration(Configuration configuration)
{
configuration.Properties["default_flush_mode"] = "Commit";
}

关于c# - 如何在 C# 中将默认的 FlushMode 更改为 Commit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30724958/

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