zoukankan      html  css  js  c++  java
  • csharp: Configuring ASP.NET with Spring.NET and FluentNHibernate

    Domain: FluentNhibernateLocalSessionFactoryObject.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Spring.Data.NHibernate;
    using NHibernate.Cfg;
    using FluentNHibernate.Automapping;
    using FluentNHibernate.Conventions.Helpers;
    using FluentNHibernate.Cfg;
    using FluentNHibernate.Cfg.Db;
    using System.Reflection;
    using FluentNHibernate;
    using NHibernate.Tool.hbm2ddl;
    using NHibernate;
    
    
    namespace Geovin.Du.Domain
    {
        /// <summary>
        /// 涂聚文20170623
        /// </summary>
        public class FluentNhibernateLocalSessionFactoryObject : LocalSessionFactoryObject
        {
            ///// <summary>
            ///// Sets the assemblies to load that contain fluent nhibernate mappings.
            ///// </summary>
            ///// <value>The mapping assemblies.</value>
            //public string[] FluentNhibernateMappingAssemblies {
            //    get;
            //    set;
            //}MySQLConfiguration.Standard
    
            public string[] FluentNhibernateMappingAssemblies { get; set; }
            public string ConnectionStringName { get; set; }
            static readonly object factorylock = new object();
    
            protected override void PostProcessConfiguration(Configuration config)
            {
                ConnectionStringName = "Server=GEOVINDU-PC;Database=DuMailSystem;User ID=sa;Password=涂聚文";
                base.PostProcessConfiguration(config);
                FluentConfiguration fluentConfig = Fluently.Configure(config)
                    .Database(MsSqlConfiguration.MsSql2012.ConnectionString(ConnectionStringName)) //MsSql2005 MsSql2012 
                    .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true));
                Array.ForEach(FluentNhibernateMappingAssemblies,
                               assembly => fluentConfig.Mappings(
                                                        m => m.FluentMappings.AddFromAssembly(Assembly.Load(assembly))
                                                            .Conventions.Add(FluentNHibernate.Conventions.Helpers.DefaultLazy.Never())
                                                        )
                             );
                fluentConfig.BuildSessionFactory();
            }
        } //class
    }
    

      Dao:dataAccess.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <objects xmlns="http://www.springframework.net" xmlns:db="http://www.springframework.net/database" xmlns:tx="http://www.springframework.net/tx">
      <!--描述-->
      <description>
        数据访问的配置信息
        包括:DbProvider
        NHibernate
      </description>
    
      <!-- 通过主应用程序的上下文配置文件引用 -->
      <object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
        <property name="ConfigSections" value="spring/databaseSettings"/>
      </object>
    
      <!-- 数据库的配置-->
      <db:provider id="DbProvider"
                       provider="SqlServer-2.0"
                       connectionString="Server=${db.server};Database=${db.database};User ID=${db.userid};Password=${db.password}"
                   />
    
      <!-- Fluent NHibernate 配置  涂聚文 Geovin Du-->
    
    	<!-- 可以通过 name 为其指定别名 name="SessionFactory" -->
    	<object id="NHibernateSessionFactory" type="Geovin.Du.Domain.FluentNhibernateLocalSessionFactoryObject, Domain">
    		<!--关于数据库连接的配置,直接使用 DbProvider 中的设置,这样,不需要为 Hibernate 再提供连接串和驱动-->
    		<property name="DbProvider" ref="DbProvider"/>
    		<!--包含有映射文件的程序集,需要分析的hbm程序集名称-->
    		<property name="FluentNhibernateMappingAssemblies">
    			<list>
    				<value>Domain</value>
    			</list>
    		</property>
    		<!--其他的参数-->
    		<property name="HibernateProperties">
    			<dictionary>
    				<!--方言MsSql2005Dialect-->
    				<entry key="dialect" value="NHibernate.Dialect.MsSql2012Dialect"/>
    				<entry key="use_proxy_validator" value="false" />
    				<entry key="show_sql" value="true"/>
    			</dictionary>
    		</property>
    		<!--必须增加此项说明,与 Spring 的声明式事务集成-->
    		<property name="ExposeTransactionAwareSessionFactory" value="true" />
    	</object>
    

      NHibernate 配置

    <!-- NHibernate 配置 涂聚文 Geovin Du -->
     
    <!-- 可以通过 name 为其指定别名 name="SessionFactory" -->
      <object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject,Spring.Data.NHibernate4">
         <!--关于数据库连接的配置,直接使用 DbProvider 中的设置,这样,不需要为 Hibernate 再提供连接串和驱动-->
        <property name="DbProvider" ref="DbProvider"/>
         <!--包含有映射文件的程序集,需要分析的hbm程序集名称-->
        <property name="MappingAssemblies">
          <list>
            <value>Domain</value>
          </list>
        </property>
         <!--其他的参数-->
        <property name="HibernateProperties">
          <dictionary>
             <!--方言-->
            <entry key="dialect" value="NHibernate.Dialect.MsSql2005Dialect"/>
            <entry key="use_proxy_validator" value="false" />
            <entry key="show_sql" value="true"/>
          </dictionary>
        </property>
         <!--必须增加此项说明,与 Spring 的声明式事务集成-->
        <property name="ExposeTransactionAwareSessionFactory" value="true" />
      </object>
    

      Dao:objects.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <objects xmlns="http://www.springframework.net">
    
      <object id="CustomerDaoImpl" type="Geovin.Du.Dao.CustomerDao,Dao">
         <!--ref 表示引用的对象--> 
        <property name="SessionFactory" ref="NHibernateSessionFactory"  />
      </object>
    
      <object id="SendMailDaoImpl" type=" Geovin.Du.Dao.SendMailDao,Dao">
        <!--ref 表示引用的对象-->
        <property name="SessionFactory" ref="NHibernateSessionFactory"  />
      </object>
    
    
    </objects>
    

      Service:objects.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <objects xmlns="http://www.springframework.net">
    
      <object id="CustomerServiceImpl" type="Geovin.Du.Service.CustomerService"    >
         <!--ref 表示引用的对象--> 
        <property name="CustomerDao" ref="CustomerDaoImpl"  />
      </object>
      <object id="SendMailServiceImpl" type="Geovin.Du.Service.SendMailService">
        <!--ref 表示引用的对象-->
        <property name="SendMailDao" ref="SendMailDaoImpl"  />
      </object>
    </objects>
    

      FluentNHibernateSpingNetDemo:objects.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <objects xmlns="http://www.springframework.net">
      <object id="framework" type="FluentNHibernateSpingNetDemo.Framework">
        <property name="Name" value="Spring.NET"/>
      </object>
    
      <!-- 页面对象 -->
      <object type="~/Default.aspx">
        <!-- ref 表示引用的对象 -->
        <property name="Framework" ref="framework"/>
      </object>
    
      <object type="~/Customer/index.aspx">
        <property name="CustomerService" ref="CustomerServiceImpl"/>
      </object>
    
      <object type="~/Send/index.aspx">
        <property name="SendMailService" ref="SendMailServiceImpl"/>
      </object>
    </objects>
    

      FluentNHibernateSpingNetDemo:Web.config

    <?xml version="1.0"?>
    
    <!--
      有关如何配置 ASP.NET 应用程序的详细信息,请访问
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    
    <configuration>
      <configSections>
        <!-- Spring 的配置 -->
        <sectionGroup name="spring">
          <section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web"/>
    
          <!-- 数据库的配置参数 -->
          <section name="databaseSettings" type="System.Configuration.NameValueSectionHandler"/>
        </sectionGroup>
    
        <!-- 日志配置 -->
        <sectionGroup name="common">
          <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
        </sectionGroup>
      </configSections>
    	<connectionStrings>
    		<add name="SqlConnection" connectionString="Server=GEOVINDU-PC;Database=DuMailSystem;User ID=sa;Password=770214" providerName="System.Data.SqlClient"/>
    		<add name="SqlRole" connectionString="dbo"/>
    		<!--<add name="SqlConnection" connectionString="Server=124.172.156.191;Database=dupcitgeovindu;User ID=dupcitgeovindu_f;Password=lf770214;"  providerName="System.Data.SqlClient"/>
        <add name="SqlRole" connectionString="dupcitgeovindu_f"/>-->
    	</connectionStrings>
      <spring>
        <context>
          <resource uri="~/Config/objects.xml"/>
    
          <!-- 嵌入在程序集中的配置文件 ,首先是程序集名称,然后命名空间,最后文件名, 注意名称的大小写必须完全一致 -->
          <resource uri="assembly://Dao/Dao.Config/dataAccess.xml"/>
          <resource uri="assembly://Dao/Dao.Config/objects.xml"/>
          <resource uri="assembly://Service/Service.Config/objects.xml"/>
        </context>
    
        <!--数据库配置服务器地址-->
        <databaseSettings>
          <add key="db.server" value="GEOVINDU-PC"/>
          <add key="db.database" value="DuMailSystem"/>
          <add key="db.userid" value="涂聚文"/>
          <add key="db.password" value="涂聚文"/>
        </databaseSettings>
      </spring>
    
      <!--<common>
        <logging>
          <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
             使用 log4net 配置文件 
            <arg key="configType" value="FILE-WATCH" />
            <arg key="configFile" value="~/Config/log4net.xml" />
          </factoryAdapter>
        </logging>
      </common>-->
    
      <appSettings>
        <!-- 为 OpenSessionInViewModule 的 SessionFactory 提供名字 -->
        <add key="Spring.Data.NHibernate.Support.OpenSessionInViewModule.SessionFactoryObjectName" value="NHibernateSessionFactory"/>
      </appSettings>
      
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
    
        <!--<authentication mode="Forms">
          <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
        </authentication>-->
        <httpModules>
          <!-- Spring 提供的 Module  -->
          <add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web"/>
    
          <!-- 
              由 Spring 自动打开会话,必须提供一个名为 SessionFactory 的会话工厂 
              使用后,可以使用 SessionFactory 的 GetCurrentSession 方法获取会话
          -->
          <add name="OpenSessionInView"
               type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate4"/>
        </httpModules>
        <httpHandlers>
          <!-- Spring 提供的处理程序 -->
          <add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web"/>
          <!-- 取消 Spring.NET 对于 Web 服务的处理 -->
          <!--<add verb="*" path="*.asmx" type="Spring.Web.Services.WebServiceHandlerFactory, Spring.Web"/>-->
          <add verb="*" path="ContextMonitor.ashx" type="Spring.Web.Support.ContextMonitor, Spring.Web"/>
          <add verb="*" path="*.ashx" type="Spring.Web.Support.DefaultHandlerFactory, Spring.Web"/>
        </httpHandlers>
        <!--<membership>
          <providers>
            <clear/>
            <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
                 enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
                 maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
                 applicationName="/" />
          </providers>
        </membership>
    
        <profile>
          <providers>
            <clear/>
            <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
          </providers>
        </profile>
    
        <roleManager enabled="false">
          <providers>
            <clear/>
            <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
            <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
          </providers>
        </roleManager>-->
    
      </system.web>
    
      <!--<system.webServer>
         <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>-->
    </configuration>
    

      http://blog.bennymichielsen.be/2009/01/04/using-fluent-nhibernate-in-spring-net/

    protected override void PostProcessConfiguration(Configuration config)
    {
    base.PostProcessConfiguration(config);
    Fluently.Configure(config)
    .Database(MySQLConfiguration.Standard.ConnectionString(
    c => c.FromConnectionStringWithKey(“connectionString”)))
    .Mappings( m => m.FluentMappings
    .AddFromAssemblyOf())
    .BuildSessionFactory();
    }
    
     
    
     
    
     
    
    protected override ISessionFactory NewSessionFactory(Configuration config)
    {
    config = Fluently.Configure(config)
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf())
    .BuildConfiguration();
    return base.NewSessionFactory(config);
    }
     
    
    here is the implementation if you are using FluentNhibernate auto mapping :
    protected override void PostProcessConfiguration(Configuration config)
    {
    base.PostProcessConfiguration(config);
    
    var autoMappingCfg = new AutoMappingConfiguration();
    
    var autoMap = AutoMap.AssemblyOf(autoMappingCfg)
    .Conventions.Add(DefaultCascade.All(), DefaultLazy.Never())
    .Conventions.Add()
    .Override(map => { map.IgnoreProperty(i => i.Total); });
    
    Fluently.Configure(config)
    .Mappings(m => m.AutoMappings.Add(autoMap))
    .BuildConfiguration();
    }
    
    in outmapping you don’t need to inject FluentNhibernateMappingAssemblies. so configure Sping.Net accordingly
    
     
    
     
    
     
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Spring.Data.NHibernate;
    using FluentNHibernate;
    using System.Reflection;
    using NHibernate.Cfg;
     
    namespace SessionFactories
    {
        public class FluentNhibernateLocalSessionFactoryObject
        : LocalSessionFactoryObject
        {
            /// <summary>
            /// Sets the assemblies to load that contain fluent nhibernate mappings.
            /// </summary>
            /// <value>The mapping assemblies.</value>
            public string[] FluentNhibernateMappingAssemblies
            {
                get;
                set;
            }
     
            protected override void PostProcessConfiguration(Configuration config)
            {
                base.PostProcessConfiguration(config);
                if(FluentNhibernateMappingAssemblies != null)
                {
                    foreach(string assemblyName in FluentNhibernateMappingAssemblies)
                    {
                        config.AddMappingsFromAssembly(Assembly.Load(assemblyName));
                    }
                }
            }
        }
    }
     
    

      

  • 相关阅读:
    poj 1080 ——Human Gene Functions——————【最长公共子序列变型题】
    hdu 2845——Beans——————【dp】
    nyoj 214——单调递增子序列(二)——————【二分搜索加dp】
    nyoj 104——最大和——————【子矩阵最大和】
    nyoj 10——skiing————————【记忆化搜索】
    >>8) & 0xFF中的 >> 和 &0xFF 的作用
    C语言中的左移与右移 <<, >> 位运算
    ByPass Mode(略过模式或旁路模式)
    C语言&C++ 中External dependencies
    xor 和 or 有什么区别
  • 原文地址:https://www.cnblogs.com/geovindu/p/7079309.html
Copyright © 2011-2022 走看看