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;
        }
    }
复制代码

 

 

posted @   Gyoung  阅读(549)  评论(1编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示