.net core 如何将hibernate.cfg移到appsettings.json中
对于NHibernate和.NET Core,我有一个.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
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
文件的语法是什么或者,如果可以只将连接字符串移动到
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
重写了连接字符串。