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));
}
}
}
}
}

  

csharp: Configuring ASP.NET with Spring.NET and FluentNHibernate的更多相关文章

  1. [转]ASP.NET MVC Spring.NET NHibernate 整合

    请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...

  2. ASP.NET MVC Spring.NET NHibernate 整合

    请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...

  3. ASP.NET MVC Spring.NET 整合

    请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...

  4. JavaPersistenceWithMyBatis3笔记-第5章Configuring MyBatis in a Spring applications-001

    一. 1.Mapper /** * */ package com.mybatis3.mappers; import java.util.List; import org.apache.ibatis.a ...

  5. Asp.Net mvc4 +Spring

    添加相应的引用对象.(以下全部) 修改mvc的Global.asax文件内容 需要将控制器中原来需要new出来的对象改成属性成员 添加这个属性的注入对象 再去修改spring对web.config的一 ...

  6. Asp.Net 熟悉 Spring

    注:(为加强记忆,所以记录下来,对于有些地方为什么那样写,我也不太理解) 一.我们先创建个窗体应用程序Demos,事先熟悉它是这么实现的 第一步,先在项目的根目录下建一个library文件夹,目的是放 ...

  7. 在网页中显示CHM (c# csharp .net asp.net winform)

    CHM即“已编译的帮助文件”,主要由.hhc(目录文件)..hhk(索引文件)以及相应的帮助主题文件(.html,.htm)这些内容编译而成. 方法对比 在网页中显示CHM内容,大致有以下几种办法: ...

  8. Spring.NET的IoC容器(The IoC container)——简介(Introduction)

    简介 这个章节介绍了Spring Framework的控制反转(Inversion of Control ,IoC)的实现原理. Spring.Core 程序集是Spring.NET的 IoC 容器实 ...

  9. 【转载】ASP.NET MVC Web API 的路由选择

    此文章描述了ASP.NET Web API如何将Http请求路由到controller. 路由表 在ASP.NET Web API中,controller是用来处理HTTP请求的一个类.这个类中用于处 ...

随机推荐

  1. JS中多维数组的深拷贝的多种实现方式

    因为javascript分原始类型与引用类型(与java.c#类似).Array是引用类型,所以直接用=号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,并没有实现数组的数据的拷贝.另外对一维 ...

  2. WebView 错误码整理

    在使用WebView中,我们不可避免的会接触到WebView加载失败的异常处理的需求,这时候,需要我们监听失败的方法也就是onReceivedError方法: public class CustomW ...

  3. 使用广播-BroadcastReceiver最详细解析

    女孩:BroadcastReceiver是什么呀? 男孩:Broadcast是广播的意思,在Android中应用程序之间的传输信息的机制,BroadcastReceiver是接收广播通知的组件,广播和 ...

  4. 影响 POST 请求文件上传失败的几个环节的配置(php + nginx)

    写在前面 最近写一个 php 接口,接受上传的文件,发现文件只要超过 5m 以上就会无响应失败,最后发现是 shadowsocks 的 timeout 设置问题(我全程开了全局的 VPN),但一开始并 ...

  5. Maven - Tips

    1- Maven的Settings http://maven.apache.org/settings.html 2- Maven设置代理 示例: <proxies> <proxy&g ...

  6. java main()线程是不是最后一个退出的(相比较main中创建的其他多个线程)

    JVM会在所有的非守护线程(用户线程)执行完毕后退出: main线程是用户线程: 仅有main线程一个用户线程执行完毕,不能决定JVM是否退出,也即是说main线程并不一定是最后一个退出的线程. pu ...

  7. jsp-静态包含和动态包含的区别

    include指令是静态包含.静态包含的意思就是:把文件的代码内容都包含进来,再编译! include指令是静态包含,include行为是动态包含.其实include行为就是封装了request.ge ...

  8. gitlab ssh_key

    ubuntu下生成git的密钥 1 生成ssh key 执行 命令 ssh-keygen -t rsa -C “wangwei@**.com.cn” 邮箱根据自己实际修改,一直回车 2 查看生成的密钥 ...

  9. springboot shiro开启注释

    shiroconfiguration中增加 @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceA ...

  10. MongoDB的aggregate聚合

    聚合框架中常用的几个操作: $project:修改输入文档的结构.可以用来重命名.增加或删除域,也可以用于创建计算结果以及嵌套文档.(显示的列,相当遇sql 的) $match:用于过滤数据,只输出符 ...