zoukankan      html  css  js  c++  java
  • nhibernate change connection

    http://stackoverflow.com/questions/4335827/changing-nhibernate-connectionstring

    http://stackoverflow.com/questions/491139/how-do-you-change-nhibernates-connection-string-per-http-request

    http://jasondentler.com/blog/2009/11/authentication-impersonation-and-dynamic-nhibernate-connection-strings

    http://www.nhforge.org/wikis/howtonh/dynamically-change-user-info-in-connection-string.aspx

    Dynamically change user info in connection string

    In some cases our clients has to use the same database user id in each connection, so they can use audit and security features of their database system (and their DBAs will be happy [:)]).

    To do that in Nh We can use the ConnectionProvider facility. Just derive a class from the standard DriverConnectionProvider class:

     

    public class DynamicConnectionProvider : DriverConnectionProvider
    {
     private string _connectionString;
     public override void Configure(IDictionary<string, string> settings)
     {
     
      // Connection string in the configuration overrides named connection string
      if (!settings.TryGetValue(NHibernate.Cfg.Environment.ConnectionString,out _connectionString))
     _connectionString = GetNamedConnectionString(settings);
     
      if (_connectionString == null)
      {
       throw new HibernateException("Could not find connection string setting (set " 
        + NHibernate.Cfg.Environment.ConnectionString + " or " 
        + NHibernate.Cfg.Environment.ConnectionStringName + " property)");
      }
      ConfigureDriver(settings);
     }

    This is necessary because the original connection string is private, but just copy the code from base method.

    The real magic is in "ConnectionString" property, it is called when nh has to connect in a Session. You have to override it so you can make the changes you need.

     

    protected override string ConnectionString
    {
     get { return FixConnectionString(_connectionString); }
    }
     

    In this case FixConnectionString read the user info from some environment variable and inject it in the connection string.

    Finally configure NH to use the ConnectionProvider:

     

       <property name="connection.provider">
        MyAssembly.DynamicConnectionProvider, MyAssembly
       </property>
  • 相关阅读:
    python中有哪些类型的布尔值是False?
    django中间件(获取请求ip)
    用python进行月份加减的函数
    Python取整函数
    Python里面search()和match()的区别
    在追灿公司的学习笔记
    Maven学习笔记
    天梯赛练习 L3-006 迎风一刀斩 (30分) 几何关系
    PAT甲级 1155 Heap Paths (30分) 堆模拟
    天梯赛练习 L3-016 二叉搜索树的结构 (30分)
  • 原文地址:https://www.cnblogs.com/CodingArt/p/5986052.html
Copyright © 2011-2022 走看看