.net core 如何将hibernate.cfg移到appsettings.json中

.net core 如何将hibernate.cfg移到appsettings.json中,.net-core,nhibernate,.net Core,Nhibernate,对于NHibernate和.NET Core,我有一个hibernate.cfg.xml文件定义为: <?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider">NHibern

对于NHibernate和.NET Core,我有一个
hibernate.cfg.xml
文件定义为:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">Server=.;Database=OrmCookbook;Trusted_Connection=True;</property>

    <property name="show_sql">false</property>
  </session-factory>
</hibernate-configuration>

NHibernate.Connection.DriverConnectionProvider
NHibernate.dialogue.mssql2000方言
NHibernate.Driver.SqlClientDriver
服务器=。;数据库=OrmCookbook;Trusted_Connection=True;
假的
  • 将它放入我的
    appsettings.json
    文件的语法是什么
  • 加载所述json文件的语法是什么


  • 或者,如果可以只将连接字符串移动到
    appsettings.json
    ?这是我最需要控制的问题。

    正如您在评论中提到的,代码配置也是您可以接受的解决方案。以下是如何通过代码配置NHibernate会话工厂:

    导入名称空间:

    using NHibernate.Cfg;
    using NHibernate.Cfg.MappingSchema;
    
    以下是配置代码:

    Configuration configuration = new Configuration();
    
    configuration.SetProperty(NHibernate.Cfg.Environment.Dialect, "YourDialect");
    configuration.SetProperty(NHibernate.Cfg.Environment.ConnectionString, "YourConnectionString");
    configuration.SetProperty(NHibernate.Cfg.Environment.DefaultSchema, "YourDefaultSchema");
    configuration.SetProperty(NHibernate.Cfg.Environment.Isolation, "ReadCommitted");
    configuration.SetProperty(NHibernate.Cfg.Environment.BatchSize, "YourBatchSize");
    configuration.SetProperty(NHibernate.Cfg.Environment.ShowSql, "true");
    configuration.SetProperty(NHibernate.Cfg.Environment.FormatSql, "true");
    configuration.AddMapping(YourHbmMappingInstance);
    configuration.SessionFactory().DefaultFlushMode("YourFlushMode");
    
    ISessionFactory sessionFactory = configuration.BuildSessionFactory();
    
    对于
    AddMapping
    方法,您需要提供一个
    Assembly
    ,您在其中定义了映射

    在应用程序启动时调用此代码一次。在整个应用程序生命周期内维护会话工厂的实例,以创建会话


    此外,如果您想配置log4net进行日志记录,请参考答案。

    一个选项是为Nhibernate配置提供一个
    idictionary
    。它是
    Microsoft.Extensions.Configuration.IConfiguration
    和Nhibernate配置之间的共同点

    例如,如果您的Nhibernate设置位于appsettings.json的
    Nhibernate
    部分:

    {
    “连接字符串”:{
    “myconnstring”:“…”
    },
    “NHibernate”:{
    “connection.connection\u string\u name”:“myconnstring”,
    “方言”:“NHibernate.方言.PostgreSQL83方言”,
    “当前会话上下文类”:“异步本地”,
    “缓存。使用第二级缓存”:true,
    “事务处理。在系统上使用连接”:false,
    “cache.provider_类”:“NHibernate.cache.HashtableCacheProvider,NHibernate”,
    “缓存。使用\u查询\u缓存”:false
    }
    }
    
    然后您可以像这样构建您的
    ISessionFactory

    IDictionary nHibernateSettings=config.GetSection(“NHibernate”)
    .GetChildren()
    .ToDictionary(x=>x.Key,y=>y.Value);
    if(nHibernateSettings.TryGetValue(NHibernate.Cfg.Environment.ConnectionStringName,out string?connStringName)和&!string.IsNullOrWhiteSpace(connStringName))
    {
    nHibernateSettings[NHibernate.Cfg.Environment.ConnectionString]=config.GetConnectionString(connStringName);
    }
    var conf=new NHibernate.Cfg.Configuration(){Properties=nHibernateSettings};
    conf.AddAssembly(“您的程序集名称”);
    ISessionFactory sf=sessionFactory=conf.BuildSessionFactory();
    
    我最终只是使用hibernate.cfg.xml文件,并用
    configuration.SetProperty
    重写了连接字符串。