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. SDWebImage之工具类

    SDWebImage使用了很多工具类来对图片的处理,比如获取图片类型.图片放大缩小.GIF图片处理.图片解压缩处理等.下面我们来看一下这几个工具类. 1.NSData+ImageContentType ...

  2. 1.开始学习ASP.NET MVC

    Hello,大家好! 好久没有开始记录博客了,是时候开始分享一下了,这个系列主要为零基础的同学,量身打造的.废话不多说,我们开干! 什么是ASP.NET MVC MVC(Model-View-Cont ...

  3. XCode 无法识别设备

    XCode 取消Unpair Device 后不能读取设备 1:退出XCode 2:断开设备连接 3:在终端执行‘sudo pkill usbmuxd’ 4:重启XCode 5:连接设备即可

  4. JavaScript实现LUHN算法验证银行卡号有效性

    一般验证银行卡有效性用到一种叫做LUHN的算法,简介请参考这篇博客:基于Luhn算法的银行卡卡号的格式校验 注意: 1.LUHN算法只是能校验卡号是否有效,并不能校验卡号和用户名是否一致. 2.如果有 ...

  5. Shell - 简明Shell入门14 - 操作符(Operator)

    示例脚本及注释 #!/bin/bash echo "No code, just some comments." # ### 通配符 # * 代表任意(0个或多个)字符 # ? 代表 ...

  6. CUDA driver version is insufficient for CUDA runtime version 解决

    配置ubuntu17.1+CUDA9.2的caffe环境,CUDA sample编译完成,执行到./deviceQuery时报错:CUDA driver version is insufficient ...

  7. java使用document解析xml文件

    准备工作: 1创建java工程 2创建xml文档. 完成后看下面代码: import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; ...

  8. Xamarin.Android 使用 SQLite 出现 Couldn't read row 0, col -1 from CursorWindow. 异常

    异常:Java.Lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cu ...

  9. LDA-线性判别分析(二)Two-classes 情形的数学推导

    本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...

  10. iOS开发工具

    Xcode插件 几乎所有开发者都知道Alcatraz是一个开源的包管理工具,可以让我们更轻松地管理各种插件.接下来就介绍下我的最推荐的10个插件: 15.FuzzyAutocompletePlugin ...