csharp: Configuring ASP.NET with Spring.NET and FluentNHibernate
Domain: FluentNhibernateLocalSessionFactoryObject.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?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 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <!-- 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | <?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/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 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)); } } } } } |
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
分类:
架构设计
标签:
Fluent NHibernate
, Spring.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2010-06-26 asp.net3.5 csharp Calendar 控件显示周次
2009-06-26 jQuery InputHintBox