Nhibernate 3.0 cookbook学习笔记 动态设置连接字符串
我们都知道数据库有两种验证模式:Windows身份验证模式与SQL SERVER验证模式。
在Nhibernate中可以动态的去配置它。
在App.config中,这样添加两个连接字符串
<add name="db" connectionString= "Server=.\SQLExpress; Database=NHCookbook; User Id=AnonymousUser; Password=p455w0rd"/> <add name="auth_db" connectionString= "Server=.\SQLExpress; Database=NHCookbook; Trusted_Connection=SSPI"/>
对应Nhibernate程序的配制:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <!--指定代理工厂类--> <property name="proxyfactory.factory_class"> DynamicConnectionString.DynamicConnectionProvider, DynamicConnectionString </property> <!--数据库类型--> <property name="dialect"> NHibernate.Dialect.MsSql2008Dialect, NHibernate </property> <!--数据库名--> <property name="connection.connection_string_name"> db </property> <!--数据库并发数--> <property name="adonet.batch_size"> 100 </property> <!--映射的类名--> <mapping assembly="Eg.Core"/> </session-factory> </hibernate-configuration>
注意节点connection.provider的值。
然后再添加字符串提供类:
public class DynamicConnectionProvider { private const string ANON_CONN_NAME = "db"; private const string AUTH_CONN_NAME = "auth_db"; protected override string ConnectionString { get { var connstrs = ConfigurationManager.ConnectionStrings; var connstr = connstrs[ANON_CONN_NAME]; if (IsAuthenticated()) connstr = connstrs[AUTH_CONN_NAME]; return connstr.ConnectionString; } } private bool IsAuthenticated() { var identity = WindowsIdentity.GetCurrent(); return identity != null && identity.IsAuthenticated; } }
如果我的文章对你有帮助,就点一下推荐吧.(*^__^*)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步