您的位置:68399皇家赌场 > 虚拟主机 > 澳门皇家赌场55533网址:[转]ASP.NET MVC Spring.NET N

澳门皇家赌场55533网址:[转]ASP.NET MVC Spring.NET N

发布时间:2019-05-21 06:03编辑:虚拟主机浏览(143)

    UnitOfWork.cs代码:

    请注解转发地址:

    在重组那多少个本领从前,首先得说澳优(Ausnutria Hyproca)下结缘的手续,俗话说汗要一口一口吃,事要壹件1件做。同理这几个四个技术也是。那么在组成以前,需求对
    ASP.NET,Spring.NET,NHibernate有所领会,最棒是有一对经验,因为平白无故的就把三个手艺融入到多只,会闹些小别扭,其实就如铺排化学药品一样,若是叁中原料有一点点出路,那么全体实验也就没戏了。

    在网络有过多一代天骄都写过类似的稿子,大概是在下不才,看了不少作品都并未有把小编的标题一举成功了,同时自己在结合的过程中走了多数的弯路。后日做一下记录,防止投机忘记。好了,言归正传。

    组合原理:

    作者们在初级中学,高级中学都学过化学,知道多少物质是不能够很好的反响,必要通过催化剂来促使两个之间改动好的反射。那么我们就把ASP.NET MVC看成是物质A,NHibernate看成是物质C。本人A C=应用。然而出于A和C之间结成会推动开荒上的部分难点,那么如何是好吧,我们得以加入催化剂Spring.NET。那样经过B那几个催化剂很好的减轻了A C之间的主题材料。于是公式就出去了A B C=应用。

    当然,大家这里是程序设计而不是化学反应,所以在组成的经过中我们遵照上边包车型地铁步子。

    1. ASP.NET MVC Spring.NET

    2. ASP.NET MVC NHibernate

    3. ASP.NET MVC Spring.NET NHibernate
      本章是ASP.NET,Spring.NET,NHibernate相结合的总结篇章,看过前两篇的爱侣知道,前两篇小说只是ASP.NET MVC 和 Spring.NET,ASP.NET MVC 和 NHibernate的独自构成。本章是三者结合的尾声一篇《 ASP.NET MVC Spring.NET NHibernate》。好了,起首本章的从头到尾的经过。
      本次使用的是Spring.NET 一.三.二,NHibernate3.贰.0,ASP.NET MVC叁。开拓条件是VS二〇一一

    一、创设四个解决方案“ASH”
    在化解方案中创设6个档案的次序:
    ”Com.Symjie.Web”
    ”Com.Symjie.Model”
    ”Com.symjie.BLL”
    ”Com.Symjie.DAL”
    并加上他们中间的竞相引用(三层知识,这里不再介绍)。如图:
    澳门皇家赌场55533网址 1
    并在各类项目中都拉长三个“Config”文件夹,那几个文件夹用来存放Spring.NET和NHibernate的配备文件。

    二、从Model入手,配置NHibernate的投射文件
    此间我们选取“Entity Developer”那一个软件来生成NHibernate的炫丽文件,当然手动写也能够。把变化的文书加入到Model项目中。如图:

    澳门皇家赌场55533网址 2

    接下来把User.hbm.xml文件的质量更改为“嵌入的财富”。如图:

    澳门皇家赌场55533网址 3

    User.cs代码:

    澳门皇家赌场55533网址 4澳门皇家赌场55533网址 5

    using System;using System.Collections;using System.ComponentModel;using System.Linq;using System.Text;using System.Collections.Generic;namespace Com.Symjie.Model{    public partial class User {            partial void OnCreated();                public User()        {            OnCreated();        }        public virtual int Uid        {            get;            set;        }        public virtual string Uname        {            get;            set;        }    }}
    

    澳门皇家赌场55533网址 6澳门皇家赌场55533网址 7

    User.hbm.xml文件内容:

    澳门皇家赌场55533网址 8澳门皇家赌场55533网址 9

    <?xml version="1.0" encoding="utf-8"?><hibernate-mapping assembly="Com.Symjie.Model" namespace="Com.Symjie.Model" xmlns="urn:nhibernate-mapping-2.2">  <class name="User" table="user" schema="nhibernate">    <id name="Uid" type="Int32">      <column name="uid" not-null="true" precision="10" scale="0" sql-type="int" />      <generator  />    </id>    <property name="Uname" type="String">      <column name="uname" not-null="false" length="50" sql-type="varchar" />    </property>  </class></hibernate-mapping>
    

    澳门皇家赌场55533网址 10澳门皇家赌场55533网址 11

    三、从DAL入手,先让Spring.NET 和 NHibernate相结合
    据此从DAL出手,是因为Spring.NET 和 NHibernate结合相比复杂。由于DAL是和数据库打交道的,所以在DAL项目中,大家要引进以下的多少个DLL文件。
    NHibernate:
    NHibernnate.dll
    Iesi.Collections.dll

    Spring.NET
    不经常不引进,当然引进宗旨的dll文件也足以。假设持续课程用到,我们在增进去。

    澳门皇家赌场55533网址 12

    创立三个文件分别为:
    INHibernateSessionFactory.cs提供对ISession的管理:

    澳门皇家赌场55533网址 13澳门皇家赌场55533网址 14

    public interface INHibernateSessionFactory{NHibernate.ISessionFactory SessionFactory { set; get; }}
    

    澳门皇家赌场55533网址 15澳门皇家赌场55533网址 16

    ID_User.cs 是2个对D_User的悬空切口,定义达成的方式

    澳门皇家赌场55533网址 17澳门皇家赌场55533网址 18

    public interface ID_User{IList<Model.User> GetAllUsers();    }
    

    澳门皇家赌场55533网址 19澳门皇家赌场55533网址 20

    D_User.cs 是有血有肉的达成,要落到实处接口上边的多少个接口,丰硕突显Spring.NET的Ioc。

    澳门皇家赌场55533网址 21澳门皇家赌场55533网址 22

    public class D_User:ID_User,INHibernateSessionFactory{public NHibernate.ISessionFactory SessionFactory{get;set;}public IList<Model.User> GetAllUsers(){NHibernate.ISession session =  this.SessionFactory.GetCurrentSession();            NHibernate.IQuery query = session.CreateQuery("from User");return query.List<Model.User>();}    }
    

    澳门皇家赌场55533网址 23澳门皇家赌场55533网址 24

    接下来才是最难的一有的,正是要写Spring.NET的配置文件,让Spring.NET来保管NHibernate。
    首先在Config中创制二个SpringNHibernate.xml文件。那一个文件时尽管用来配置管理NHibernate的。同时安装为“嵌入的能源”。内容如下:

    澳门皇家赌场55533网址 25澳门皇家赌场55533网址 26

    <?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>使用Spring.NET管理NHibernate  </description>  <!-- 通过主应用程序的上下文配置文件引用 ,其实就是要读取Web.config中的databaseSettings的内容,和下面的db:provider相互作用-->  <object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">    <property name="ConfigSections" value="databaseSettings"/>  </object>  <!-- 数据库的配置 ,其实就是提供数据库的连接字符串还有相应的数据库dll文件,这里使用的是MySql-5.2.3,而在项目无需引用MySql.Data.dll文件。其中$符号的内容是占位符,它的值在Web.config中进行设置-->  <db:provider provider="MySql-5.2.3"connectionString="server=${db.server};Database=${db.database};uid=${db.user};pwd=${db.password}"               />  <!-- NHibernate 配置 -->  <!-- 可以通过 name 为其指定别名 name="SessionFactory" 这个用来设置NHibernate的Session的管理对象,使用Spring.NET提供的LocalSessionFactoryObject来管理NHibernate的Session。因为NHibernate的Session是线程不安全的。-->  <object type="Spring.Data.NHibernate.LocalSessionFactoryObject,Spring.Data.NHibernate32"          >    <!-- 关于数据库连接的配置,直接使用 DbProvider 中的设置,这样,不需要为 Hibernate 再提供连接串和驱动 -->    <property name="DbProvider" ref="DbProvider"/>    <!-- 包含有映射文件的程序集,需要分析的hbm程序集名称 -->    <property name="MappingAssemblies">      <list>        <value>Com.Symjie.Model</value>      </list>    </property>    <!-- 其他的参数 -->    <property name="HibernateProperties">      <dictionary>        <!-- 方言 -->        <entry key="dialect" value="NHibernate.Dialect.MySQL5Dialect"/>        <entry key="use_proxy_validator" value="false" />        <entry key="show_sql" value="true"/>      </dictionary>    </property>    <!-- 和Spring.NET结合使用事务,必须设置此项 -->    <property name="ExposeTransactionAwareSessionFactory" value="true" />  </object></objects>
    

    澳门皇家赌场55533网址 27澳门皇家赌场55533网址 28

    下一场在Config中在创设3个”Objects.xml”,那么些文件正是Spring.NET的靶子文件,用来促成IoC的。在D_User中有四脾性质SessionFactory。那些个性和“MyNHibernateSessionFactory”要开始展览关联,换句话说在SpringNHibernate中定义的MyNHibernateSessionFactory对象正是SessionFactory的实例。那么就需求把那几个目的注入到D_User的SessionFactory属性中。同时这是Objects.xml设置为“嵌入的财富”。
    Objects.xml内容如下:

    澳门皇家赌场55533网址 29澳门皇家赌场55533网址 30

    <?xml version="1.0" encoding="utf-8" ?><objects xmlns="http://www.springframework.net"xmlns:tx="http://www.springframework.net/tx">  <object  type="Com.Symjie.DAL.D_User, Com.Symjie.DAL"    >    <!-- ref 表示引用的对象,注意这个的 MyNHibernateSessionFactory是SpringNHibernate中的定义的对象-->    <property name="SessionFactory" ref="MyNHibernateSessionFactory"  />  </object></objects>
    

    澳门皇家赌场55533网址 31澳门皇家赌场55533网址 32

    那就马到成功了Spring.NET 和 NHibernate的整合,上面就足以行使了。

    四、完成BLL层的Spring管理
    在选择此前,大家先成功BLL层的Spring管理。在BLL中创建多少个公文:
    IB_User.cs定义B_User的有关属性和办法

    澳门皇家赌场55533网址 33澳门皇家赌场55533网址 34

    public interface IB_User{DAL.ID_User D_User { set; get; }IList<Model.User> GetAllUsers();}
    

    澳门皇家赌场55533网址 35澳门皇家赌场55533网址 36

    B_User.cs实现了IB_User的格局和总体性

    澳门皇家赌场55533网址 37澳门皇家赌场55533网址 38

    public class B_User:IB_User{public DAL.ID_User D_User{get;set;}public IList<Model.User> GetAllUsers(){return this.D_User.GetAllUsers();}}
    

    澳门皇家赌场55533网址 39澳门皇家赌场55533网址 40

    下一场在Config中开创BLL.xml文件。这一个文件正是Spring.NET的目的文件,用来落到实处IoC的。

    澳门皇家赌场55533网址 41澳门皇家赌场55533网址 42

    <objects xmlns="http://www.springframework.net">    <object  type="Com.Symjie.BLL.B_User,Com.Symjie.BLL"    >        <!-- ref 表示引用的对象 -->        <property name="D_User" ref="D_UserImpl"  />    </object></objects>
    

    澳门皇家赌场55533网址 43澳门皇家赌场55533网址 44

    再正是要设置BLL.xml为”嵌入的财富“。好了,到此BLL和DAL都已产生了配备,那么上面正是哪些选取了。

    配置Web项目和Spring.NET,NHibernate
    率先,在Web项目中大家进入Spring.NET的先关dll文件。
    Spring.Core,Spring.Data.Spring.AOP,Spring.Data.NHibernate32
    接下来再Config文件夹中开创”Controllers.xml”文件,让MVC的Controller通过Spring.NET来治本,同时落到实处Ioc。
    创办贰个HomeController和呼应的视图像和文字件。内容如下:
    HomeController.cs

    澳门皇家赌场55533网址 45澳门皇家赌场55533网址 46

    public class HomeController : Controller{private BLL.IB_User B_User { get; set; }public ActionResult Index(){ViewBag.Data = B_User.GetAllUsers();return View();}}
    

    澳门皇家赌场55533网址 47澳门皇家赌场55533网址 48

    Index.cshtml

    澳门皇家赌场55533网址 49澳门皇家赌场55533网址 50

    @using Com.Symjie.Model;@{    Layout = null;}<!DOCTYPE html><html><head><title>Index</title></head><body><div>@foreach (User user in ViewBag.Data)         {@:姓名:@user.Uname<br />        }</div></body></html>
    

    澳门皇家赌场55533网址 51澳门皇家赌场55533网址 52

    这一片段,首假使对Web.config的配备,个中多少地方非常关键。先看看哪些布署Web.config文件。
    开发Web.config文件,开头安顿Spring。

    澳门皇家赌场55533网址 53澳门皇家赌场55533网址 54

    <?xml version="1.0" encoding="utf-8"?><!--  有关如何配置 ASP.NET 应用程序的详细信息,请访问  http://go.microsoft.com/fwlink/?LinkId=152368--><configuration>  <configSections>    <sectionGroup name="spring">      <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc3"/>               </sectionGroup>    <section name="databaseSettings" type="System.Configuration.NameValueSectionHandler"/>  </configSections><spring>        <context>      <resource uri="assembly://Com.Symjie.DAL/Com.Symjie.DAL.Config/SpringNHibernate.xml"/>      <resource uri="assembly://Com.Symjie.DAL/Com.Symjie.DAL.Config/Objects.xml"/>      <resource uri="assembly://Com.Symjie.BLL/Com.Symjie.BLL.Config/BLL.xml"/>      <resource uri="file://~/Config/Controllers.xml"/>    </context>  </spring><!--数据库相关的信息,和SpringNHibernate.xml中的相关。-->  <databaseSettings>    <add key="db.server" value="127.0.0.1" />    <add key="db.database" value="nhibernate" />    <add key="db.user" value="root" />    <add key="db.password" value="symjie" />  </databaseSettings>  <appSettings>    <add key="webpages:Version" value="1.0.0.0" />    <add key="ClientValidationEnabled" value="true" /><add key="UnobtrusiveJavaScriptEnabled" value="true" /><!--需要在appSettings节点处配置SessionFactory的id,这个id和SpringNHibernate中的SessionFactory的对象名一样。--> <add key="Spring.Data.NHibernate.Support.OpenSessionInViewModule.SessionFactoryObjectName" value="MyNHibernateSessionFactory"/>  </appSettings>  <system.web><!--这个是在IIS6中的设置,如果是使用的比这个高的,请看下面的设置。注意:如果使用的vs2010开发的MVC,在应该设置此项。此项是Spring。NET用来管理NHibernate的的Session的,Session在一次请求的开始打开数据库,完成之后关闭。非常重要,否则将会报No Hibernate Session bound to thread, and configuration does not allow这个异常。<httpModules>           <add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate32"/>    </httpModules>-->    <compilation debug="true" targetFramework="4.0" />    <authentication mode="Forms">      <forms loginUrl="~/Account/LogOn" timeout="2880" />    </authentication>    <pages>      <namespaces>        <add namespace="System.Web.Helpers" />        <add namespace="System.Web.Mvc" />        <add namespace="System.Web.Mvc.Ajax" />        <add namespace="System.Web.Mvc.Html" />        <add namespace="System.Web.Routing" />        <add namespace="System.Web.WebPages" />      </namespaces>    </pages>  </system.web>  <system.webServer><validation validateIntegratedModeConfiguration="false" /><!--这个是在IIS7中的设置,如果是使用的比这个高的,请看下面的设置。注意:如果使用的vs2012/vs2013开发的MVC,在应该设置此项。此项是Spring。NET用来管理NHibernate的的Session的,Session在一次请求的开始打开数据库,完成之后关闭。非常重要,否则将会报No Hibernate Session bound to thread, and configuration does not allow这个异常。--><modules runAllManagedModulesForAllRequests="true" >      <add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate32"/>    </modules>  </system.webServer>  <runtime>    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">      <dependentAssembly>        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />      </dependentAssembly>    </assemblyBinding>  </runtime>   <connectionStrings/></configuration>
    

    澳门皇家赌场55533网址 55澳门皇家赌场55533网址 56

    最终不要忘了让Global.asax承袭Spring.Web.Mvc.SpringMvcApplication

    好了,到此,大家就完了了3者的整合,F5预览一下吧。

    澳门皇家赌场55533网址 57

    请注解转发地址:

    在组合那多少个本事在此以前,首先得说喜宝(Hipp)下整合的步调,俗话说汗要一口一口吃,事要1件一件做。同理这一个三个本事也是。那么在结合以前,须要对 
    ASP.NET,Spring.NET,NHibernate有所了然,最棒是有局地经验,因为平白无故的就把2个手艺融合到3头,会闹些小别扭,其实就像布置化学药品同样,借使3中原料有几许出路,那么万事实验也就没戏了。

    在网络有为数不少贤良都写过类似的稿子,可能是在下不才,看了大多小说都尚未把自家的标题一举成功了,同时自己在重组的长河中走了众多的弯路。前几天做一下记录,幸免投机忘记。好了,言归正传。

    结缘原理:

    我们在初级中学,高级中学都学过化学,知道有些物质是不能够很好的反射,须要经过催化剂来促使两个之间更换好的感应。那么我们就把ASP.NET MVC看成是物质A,NHibernate看成是物质C。本人A C=应用。但是由于A和C之间构成会带来开辟上的一些难点(举例工作的主宰),那么怎么办呢,大家得以参与催化剂Spring.NET(物质B)。那样经过B那个催化剂很好的化解了A C之间的难题。于是公式就出去了A B C=应用。

    当然,大家这里是先后设计而不是化学反应,所以在组成的经过中大家遵照下边包车型客车步子。

    1. ASP.NET MVC Spring.NET

    2. ASP.NET MVC NHibernate

    3. ASP.NET MVC Spring.NET NHibernate 
      本章是ASP.NET,Spring.NET,NHibernate相结合的总结篇章,看过前两篇的爱侣知道,前两篇小说只是ASP.NET MVC 和 Spring.NET,ASP.NET MVC 和 NHibernate的独自构成。本章是三者结合的尾声一篇《 ASP.NET MVC Spring.NET NHibernate》。好了,开端本章的剧情。 
      此番使用的是Spring.NET 1.三.二,NHibernate三.二.0,ASP.NET MVC3。开荒条件是VS2011

    1、成立贰个消除方案“ASH” 
    在缓慢解决方案中创设6个档期的顺序: 
    ”Com.Symjie.Web” 
    ”Com.Symjie.Model” 
    ”Com.symjie.BLL” 
    ”Com.Symjie.DAL” 
    并丰盛他们中间的交互引用(三层知识,这里不再介绍)。如图: 
    澳门皇家赌场55533网址 58 
    并在各种项目中都丰硕二个“Config”文件夹,这一个文件夹用来存放Spring.NET和NHibernate的安排文件。

    贰、从Model入手,配置NHibernate的映照文件 
    此间我们应用“Entity Developer”那一个软件来生成NHibernate的投射文件,当然手动写也足以。把变化的文书到场到Model项目中。如图:

    澳门皇家赌场55533网址 59

    下一场把User.hbm.xml文件的品质改换为“嵌入的财富”。如图:

    澳门皇家赌场55533网址 60

    User.cs代码:

    澳门皇家赌场55533网址 61

    澳门皇家赌场55533网址 62

    using System;
    
    using System.Collections;
    
    using System.ComponentModel;
    
    using System.Linq;
    
    using System.Text;
    
    using System.Collections.Generic;
    
    namespace Com.Symjie.Model
    
    {
    
        public partial class User {    
    
            partial void OnCreated();        
    
            public User()
    
            {
    
                OnCreated();
    
            }
    
            public virtual int Uid
    
            {
    
                get;
    
                set;
    
            }
    
            public virtual string Uname
    
            {
    
                get;
    
                set;
    
            }
    
        }
    
    }
    

    澳门皇家赌场55533网址 63

    澳门皇家赌场55533网址 64

    User.hbm.xml文件内容:

    澳门皇家赌场55533网址 65

    澳门皇家赌场55533网址 66

    <?xml version="1.0" encoding="utf-8"?>
    
    <hibernate-mapping assembly="Com.Symjie.Model" namespace="Com.Symjie.Model" xmlns="urn:nhibernate-mapping-2.2">
    
      <class name="User" table="user" schema="nhibernate">
    
        <id name="Uid" type="Int32">
    
          <column name="uid" not-null="true" precision="10" scale="0" sql-type="int" />
    
          <generator class="identity" />
    
        </id>
    
        <property name="Uname" type="String">
    
          <column name="uname" not-null="false" length="50" sql-type="varchar" />
    
        </property>
    
      </class>
    
    </hibernate-mapping>
    

    澳门皇家赌场55533网址 67

    澳门皇家赌场55533网址 68

    三、从DAL入手,先让Spring.NET 和 NHibernate相结合 
    之所以从DAL入手,是因为Spring.NET 和 NHibernate结合比较复杂(对于刚先生接触的仇敌)。由于DAL是和数据库打交道的,所以在DAL项目中,大家要引进以下的多少个DLL文件。 
    NHibernate: 
    NHibernnate.dll 
    Iesi.Collections.dll

    Spring.NET 
    临时不引进,当然引进宗旨的dll文件也足以。借使持续课程用到,大家在累加去。

    澳门皇家赌场55533网址 69

    创建多少个公文分别为: 
    INHibernateSessionFactory.cs提供对ISession的管理:

    澳门皇家赌场55533网址 70

    澳门皇家赌场55533网址 71

    public interface INHibernateSessionFactory
    
    {
    
    NHibernate.ISessionFactory SessionFactory { set; get; }
    
    }
    

    澳门皇家赌场55533网址 72

    澳门皇家赌场55533网址 73

    ID_User.cs 是1个对D_User的聊以自慰接口,定义达成的办法

    澳门皇家赌场55533网址 74

    澳门皇家赌场55533网址 75

    public interface ID_User
    
    {
    
    IList<Model.User> GetAllUsers();
    
        }
    

    澳门皇家赌场55533网址 76

    澳门皇家赌场55533网址 77

    D_User.cs 是切实的兑现,要促成接口上面的多少个接口,丰富显示Spring.NET的Ioc。

    澳门皇家赌场55533网址 78

    澳门皇家赌场55533网址 79

    public class D_User:ID_User,INHibernateSessionFactory
    
    {
    
    public NHibernate.ISessionFactory SessionFactory
    
    {
    
    get;
    
    set;
    
    }
    
    public IList<Model.User> GetAllUsers()
    
    {
    
    NHibernate.ISession session =  this.SessionFactory.GetCurrentSession();
    
                NHibernate.IQuery query = session.CreateQuery("from User");
    
    return query.List<Model.User>();
    
    }
    
        }
    

    澳门皇家赌场55533网址 80

    澳门皇家赌场55533网址 81

    接下来才是最难的一局地,就是要写Spring.NET的布署文件,让Spring.NET来保管NHibernate。 
    第3在Config中开创多少个SpringNHibernate.xml文件。这么些文件时便是用来安排管理NHibernate的。同时安装为“嵌入的能源”。内容如下:

    澳门皇家赌场55533网址 82

    澳门皇家赌场55533网址 83

    <?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>
    
    使用Spring.NET管理NHibernate
    
      </description>
    
      <!-- 通过主应用程序的上下文配置文件引用 ,其实就是要读取Web.config中的databaseSettings的内容,和下面的db:provider相互作用-->
    
      <object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
    
        <property name="ConfigSections" value="databaseSettings"/>
    
      </object>
    
      <!-- 数据库的配置 ,其实就是提供数据库的连接字符串还有相应的数据库dll文件,这里使用的是MySql-5.2.3,而在项目无需引用MySql.Data.dll文件(可能自带吧)。其中$符号的内容是占位符,它的值在Web.config中进行设置-->
    
      <db:provider id="DbProvider"
    
    provider="MySql-5.2.3"
    
    connectionString="server=${db.server};Database=${db.database};uid=${db.user};pwd=${db.password}"
    
                   />
    
      <!-- NHibernate 配置 -->
    
      <!-- 可以通过 name 为其指定别名 name="SessionFactory" 
    
    这个用来设置NHibernate的Session的管理对象,使用Spring.NET提供的LocalSessionFactoryObject来管理NHibernate的Session。因为NHibernate的Session是线程不安全的。
    
    -->
    
      <object id="MyNHibernateSessionFactory"
    
    type="Spring.Data.NHibernate.LocalSessionFactoryObject,Spring.Data.NHibernate32"
    
              >
    
        <!-- 关于数据库连接的配置,直接使用 DbProvider 中的设置,这样,不需要为 Hibernate 再提供连接串和驱动 -->
    
        <property name="DbProvider" ref="DbProvider"/>
    
        <!-- 包含有映射文件的程序集,需要分析的hbm程序集名称 -->
    
        <property name="MappingAssemblies">
    
          <list>
    
            <value>Com.Symjie.Model</value>
    
          </list>
    
        </property>
    
        <!-- 其他的参数 -->
    
        <property name="HibernateProperties">
    
          <dictionary>
    
            <!-- 方言 -->
    
            <entry key="dialect" value="NHibernate.Dialect.MySQL5Dialect"/>
    
            <entry key="use_proxy_validator" value="false" />
    
            <entry key="show_sql" value="true"/>
    
          </dictionary>
    
        </property>
    
        <!-- 和Spring.NET结合使用事务,必须设置此项 -->
    
        <property name="ExposeTransactionAwareSessionFactory" value="true" />
    
      </object>
    
    </objects>
    

    澳门皇家赌场55533网址 84

    澳门皇家赌场55533网址 85

    接下来在Config中在开立二个”Objects.xml”,那些文件便是Spring.NET的靶子文件,用来兑现IoC的。在D_User中有2个属性SessionFactory。那脾个性和“MyNHibernateSessionFactory”要拓展关联,换句话说在SpringNHibernate中定义的MyNHibernateSessionFactory对象正是SessionFactory的实例。那么就要求把那几个目的注入到D_User的SessionFactory属性中。同时那是Objects.xml设置为“嵌入的财富”。 
    Objects.xml内容如下:

    澳门皇家赌场55533网址 86

    澳门皇家赌场55533网址 87

    <?xml version="1.0" encoding="utf-8" ?>
    
    <objects xmlns="http://www.springframework.net"
    
    xmlns:tx="http://www.springframework.net/tx">
    
      <object id="D_UserImpl" type="Com.Symjie.DAL.D_User, Com.Symjie.DAL"    >
    
        <!-- ref 表示引用的对象,注意这个的 MyNHibernateSessionFactory是SpringNHibernate中的定义的对象-->
    
        <property name="SessionFactory" ref="MyNHibernateSessionFactory"  />
    
      </object>
    </objects>
    

    澳门皇家赌场55533网址 88

    澳门皇家赌场55533网址 89

    那就到位了Spring.NET 和 NHibernate的组合,下边就可以动用了。

    四、完成BLL层的Spring管理 
    在应用此前,咱们先产生BLL层的Spring管理。在BLL中开创八个文件: 
    IB_User.cs定义B_User的连锁属性和形式

    澳门皇家赌场55533网址 90

    澳门皇家赌场55533网址 91

    public interface IB_User
    
    {
    
    DAL.ID_User D_User { set; get; }
    
    IList<Model.User> GetAllUsers();
    
    }
    

    澳门皇家赌场55533网址 92

    澳门皇家赌场55533网址 93

    B_User.cs实现了IB_User的点子和天性

    澳门皇家赌场55533网址 94

    澳门皇家赌场55533网址 95

    public class B_User:IB_User
    
    {
    
    public DAL.ID_User D_User
    
    {
    
    get;
    
    set;
    
    }
    
    public IList<Model.User> GetAllUsers()
    
    {
    
    return this.D_User.GetAllUsers();
    
    }
    
    }
    

    澳门皇家赌场55533网址 96

    澳门皇家赌场55533网址 97

    下一场在Config中开创BLL.xml文件。那些文件正是Spring.NET的指标文件,用来完结IoC的。

    澳门皇家赌场55533网址 98

    澳门皇家赌场55533网址 99

    <objects xmlns="http://www.springframework.net">
    
        <object id="B_UserImpl" type="Com.Symjie.BLL.B_User,Com.Symjie.BLL"    >
    
            <!-- ref 表示引用的对象 -->
    
            <property name="D_User" ref="D_UserImpl"  />
    
        </object>
    
    </objects>
    

    澳门皇家赌场55533网址 100

    澳门皇家赌场55533网址 101

    再者要设置BLL.xml为”嵌入的财富“。好了,到此BLL和DAL都已成功了布置,那么上面便是怎样利用了。

    配置Web项目和Spring.NET,NHibernate 
    先是,在Web项目中大家投入Spring.NET的先关dll文件。 
    Spring.Core,Spring.Data.Spring.AOP,Spring.Data.NHibernate32 
    然后再Config文件夹中创造”Controllers.xml”文件,让MVC的Controller通过Spring.NET来保管,同时落到实处Ioc。 
    创设多个HomeController和相应的视图像和文字件。内容如下: 
    HomeController.cs

    澳门皇家赌场55533网址 102

    澳门皇家赌场55533网址 103

    public class HomeController : Controller
    
    {
    
    private BLL.IB_User B_User { get; set; }
    
    public ActionResult Index()
    
    {
    
    ViewBag.Data = B_User.GetAllUsers();
    
    return View();
    
    }
    
    }
    

    澳门皇家赌场55533网址 104

    澳门皇家赌场55533网址 105

    Index.cshtml

    澳门皇家赌场55533网址 106

    澳门皇家赌场55533网址 107

    @using Com.Symjie.Model;
    
    @{
    
        Layout = null;
    
    }
    
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
    <title>Index</title>
    
    </head>
    
    <body>
    
    <div>
    
    @foreach (User user in ViewBag.Data) 
    
            {
    
    @:姓名:@user.Uname<br />
    
            }
    
    </div>
    
    </body>
    
    </html>
    

    澳门皇家赌场55533网址 108

    澳门皇家赌场55533网址 109

    那一某些,紧如若对Web.config的配置,个中多少地方特别重大。先看看怎么着布署Web.config文件。 
    开辟Web.config文件,初始布局Spring。

    澳门皇家赌场55533网址 110

    澳门皇家赌场55533网址 111

    <?xml version="1.0" encoding="utf-8"?>
    
    <!--
    
      有关如何配置 ASP.NET 应用程序的详细信息,请访问
    
      http://go.microsoft.com/fwlink/?LinkId=152368
    
    -->
    
    <configuration>
    
      <configSections>
    
        <sectionGroup name="spring">
    
          <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc3"/>
    
                   </sectionGroup>
    
        <section name="databaseSettings" type="System.Configuration.NameValueSectionHandler"/>
    
      </configSections>
    
    <spring>    
    
        <context>
    
          <resource uri="assembly://Com.Symjie.DAL/Com.Symjie.DAL.Config/SpringNHibernate.xml"/>
    
          <resource uri="assembly://Com.Symjie.DAL/Com.Symjie.DAL.Config/Objects.xml"/>
    
          <resource uri="assembly://Com.Symjie.BLL/Com.Symjie.BLL.Config/BLL.xml"/>
    
          <resource uri="file://~/Config/Controllers.xml"/>
    
        </context>
    
      </spring>
    
    <!--
    
    数据库相关的信息,和SpringNHibernate.xml中的相关。
    
    -->
    
      <databaseSettings>
    
        <add key="db.server" value="127.0.0.1" />
    
        <add key="db.database" value="nhibernate" />
    
        <add key="db.user" value="root" />
    
        <add key="db.password" value="symjie" />
    
      </databaseSettings>
    
      <appSettings>
    
        <add key="webpages:Version" value="1.0.0.0" />
    
        <add key="ClientValidationEnabled" value="true" />
    
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    
    <!--
    
    需要在appSettings节点处配置SessionFactory的id,这个id和SpringNHibernate中的SessionFactory的对象名一样。
    
    -->
    
     <add key="Spring.Data.NHibernate.Support.OpenSessionInViewModule.SessionFactoryObjectName" value="MyNHibernateSessionFactory"/>
    
      </appSettings>
    
      <system.web>
    
    <!--
    
    这个是在IIS6中的设置,如果是使用的比这个高的,请看下面的设置。注意:如果使用的vs2010开发的MVC,在应该设置此项。此项是Spring。NET用来管理NHibernate的的Session的,Session在一次请求的开始打开数据库,完成之后关闭。非常重要,否则将会报No Hibernate Session bound to thread, and configuration does not allow这个异常。
    
    <httpModules>
    
               <add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate32"/>
    
        </httpModules>-->
    
        <compilation debug="true" targetFramework="4.0" />
    
        <authentication mode="Forms">
    
          <forms loginUrl="~/Account/LogOn" timeout="2880" />
    
        </authentication>
    
        <pages>
    
          <namespaces>
    
            <add namespace="System.Web.Helpers" />
    
            <add namespace="System.Web.Mvc" />
    
            <add namespace="System.Web.Mvc.Ajax" />
    
            <add namespace="System.Web.Mvc.Html" />
    
            <add namespace="System.Web.Routing" />
    
            <add namespace="System.Web.WebPages" />
    
          </namespaces>
    
        </pages>
    
      </system.web>
    
      <system.webServer>
    
    <validation validateIntegratedModeConfiguration="false" />
    
    <!--这个是在IIS7中的设置,如果是使用的比这个高的,请看下面的设置。注意:如果使用的vs2012/vs2013开发的MVC,在应该设置此项。此项是Spring。NET用来管理NHibernate的的Session的,Session在一次请求的开始打开数据库,完成之后关闭。非常重要,否则将会报No Hibernate Session bound to thread, and configuration does not allow这个异常。-->
    
    <modules runAllManagedModulesForAllRequests="true" >
    
          <add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate32"/>
    
        </modules>
    
      </system.webServer>
    
      <runtime>
    
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    
          <dependentAssembly>
    
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
    
          </dependentAssembly>
    
        </assemblyBinding>
    
      </runtime> 
    
      <connectionStrings/>
    
    </configuration>
    

    澳门皇家赌场55533网址 112

    澳门皇家赌场55533网址 113

    末尾不要忘了让Global.asax承接Spring.Web.Mvc.SpringMvcApplication

    好了,到此,我们就成功了三者的组合,F五预览一下吗。

    澳门皇家赌场55533网址 114

        public interface ICustomerInfoRepository : IDao<CustomerInfo, int>
        {
        }
    

    结果如图:

    新建2个说了算器Customer

    public static class Initer 
     { 
       public static void Init(string sqlServerConnectionString, string mongoConnectionString) 
       { 
         //SqlServer初始化 
         SessionFactory.Init(sqlServerConnectionString); 
         //Mongodb初始化 
         NodeLinkRepository.Init(mongoConnectionString); 
       } 
     } 
    
    
    public static class SessionFactory //工厂 
      { 
        private static ISessionFactory _factory; 
    
    
        internal static ISession OpenSession() 
        { 
          return _factory.OpenSession(new Interceptor()); 
        } 
    
    
        internal static void Init(string connectionString) 
        { 
          _factory = BuildSessionFactory(connectionString); 
        } 
    
    
        private static ISessionFactory BuildSessionFactory(string connectionString) 
        { 
          //用编程的方式进行配置,让你能更好的理解,不需要编写复杂的映射文件,它能完全替换NHibernate的映射文件,让你在映射的时候能使用C#的强类型方式。 
          FluentConfiguration configuration = Fluently.Configure() 
            .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString)) 
            .Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly())) 
            .ExposeConfiguration(x => 
            { 
              x.EventListeners.PostLoadEventListeners = new IPostLoadEventListener[] 
              { 
                new EventListener() 
              }; 
            }); 
    
          return configuration.BuildSessionFactory(); 
        } 
      } 
    
    
    internal class NodeLinkRepository //仓库 Repository模式 
      { 
        private static IMongoCollection<NodeLinks> _collection; 
    
    
        public IList<NodeLink> GetLinks(int nodeId) 
        { 
          NodeLinks links = _collection.Find(x => x.Id == nodeId).SingleOrDefaultAsync().Result; 
    
          if (links == null) 
            return new NodeLink[0]; 
    
          return links.Links; 
        } 
    
    
        public Task SaveLinks(int nodeId, IEnumerable<NodeLink> links) 
        { 
          var nodeLinks = new NodeLinks(nodeId, links); 
          var updateOptions = new UpdateOptions 
          { 
            IsUpsert = true 
          }; 
    
          return _collection.ReplaceOneAsync(x => x.Id == nodeId, nodeLinks, updateOptions); 
        } 
    
    
        internal static void Init(string connectionString) 
        { 
          var client = new MongoClient(connectionString); 
          IMongoDatabase database = client.GetDatabase("sqlWithMongo"); 
          var collectionSettings = new MongoCollectionSettings 
          { 
            WriteConcern = new WriteConcern(1) 
          }; 
          _collection = database.GetCollection<NodeLinks>("links", collectionSettings); 
        } 
    
    
        private class NodeLinks 
        { 
          public int Id { get; private set; } 
          public List<NodeLink> Links { get; private set; } 
    
    
          public NodeLinks(int nodeId, IEnumerable<NodeLink> links) 
          { 
            Id = nodeId; 
            Links = new List<NodeLink>(); 
            Links.AddRange(links); 
          } 
        } 
      } 
    
    
    public class NodeRepository 
      { 
        private readonly UnitOfWork _unitOfWork; 
    
    
        public NodeRepository(UnitOfWork unitOfWork) 
        { 
          _unitOfWork = unitOfWork; 
        } 
    
    
        public Node GetById(int id) 
        { 
          return _unitOfWork.Get<Node>(id); 
        } 
    
    
        public IList<Node> GetAll() 
        { 
          return _unitOfWork.Query<Node>() 
            .ToList(); 
        } 
    
    
        public void Save(Node mongoNode) 
        { 
          _unitOfWork.SaveOrUpdate(mongoNode); 
        } 
      } 
    
    
    public class MongoNodeRepository 
      { 
        private readonly UnitOfWork _unitOfWork; 
    
    
        public MongoNodeRepository(UnitOfWork unitOfWork) 
        { 
          _unitOfWork = unitOfWork; 
        } 
    
    
        public MongoNode GetById(int id) 
        { 
          return _unitOfWork.Get<MongoNode>(id); 
        } 
    
    
        public void Save(MongoNode mongoNode) 
        { 
          _unitOfWork.SaveOrUpdate(mongoNode); 
        } 
    
    
        public IList<MongoNode> GetAll() 
        { 
          return _unitOfWork.Query<MongoNode>() 
            .ToList(); 
        } 
      } 
    

    利用Unity将ICustomerInfoRepository和CustomerInfoRepository进行注入。具体请参谋小编的另一篇博文:IOC框架之Unity

    public class UnitOfWork : IDisposable 
     { 
       private readonly ISession _session; 
       private readonly ITransaction _transaction; 
       private bool _isAlive = true; 
       private bool _isCommitted; 
    
       public UnitOfWork() 
       { 
         _session = SessionFactory.OpenSession(); 
         _transaction = _session.BeginTransaction(IsolationLevel.ReadCommitted); 
       } 
    
    
       public void Dispose() 
       { 
         if (!_isAlive) 
           return; 
    
         _isAlive = false; 
    
         try 
         { 
           if (_isCommitted) 
           { 
             _transaction.Commit(); 
           } 
         } 
         finally 
         { 
           _transaction.Dispose(); 
           _session.Dispose(); 
         } 
       } 
    
       public void Commit() 
       { 
         if (!_isAlive) 
           return; 
    
         _isCommitted = true; 
       } 
    
    
       internal T Get<T>(int id) 
       { 
         return _session.Get<T>(id); 
       } 
    
    
       internal void SaveOrUpdate<T>(T entity) 
       { 
         _session.SaveOrUpdate(entity); 
       } 
    
    
       internal IQueryable<T> Query<T>() 
       { 
         return _session.Query<T>(); 
       } 
     } 
    

    本类别目录:ASP.NET MVC肆入门到了然体系目录汇总

    你或者感兴趣的篇章:

    • 在C#连串中哪些采用NHibernate详解

    View Code

    public class MongoNode 
     { 
       public virtual int Id { get; protected set; } 
       public virtual string Name { get; protected set; } 
    
       protected virtual HashSet<NodeLink> LinksInternal { get; set; } 
       public virtual IReadOnlyList<NodeLink> Links 
       { 
         get { return LinksInternal.ToList(); } 
       } 
    
    
       protected MongoNode() 
       { 
         LinksInternal = new HashSet<NodeLink>(); 
       } 
    
    
       public MongoNode(string name) 
         : this() 
       { 
         Name = name; 
       } 
    
    
       public virtual void AddLink(MongoNode mongoNode) 
       { 
         LinksInternal.Add(new NodeLink(mongoNode.Id, mongoNode.Name)); 
         mongoNode.LinksInternal.Add(new NodeLink(Id, Name)); 
       } 
     } 
    
    
    public class MongoNodeMap : ClassMap<MongoNode> //FluentNHibernate中的类继承 
      { 
        public MongoNodeMap() 
        { 
          Id(x => x.Id, "MongoNodeId").GeneratedBy.HiLo("[dbo].[Ids]", "NextHigh", "10", "EntityName = 'MongoNode'"); 
          Map(x => x.Name).Not.Nullable(); 
        } 
      } 
    
        /// <summary>
        /// 客户信息
        /// </summary>
        public class CustomerInfo : DomainObject<CustomerInfo, int, ICustomerInfoRepository>
        {
            #region property
            /// <summary>
            /// 客户代码
            /// </summary>
            [Required(ErrorMessage = "客户代码不能为空!")]
            [StringLength(30, MinimumLength = 0, ErrorMessage = "客户代码最大长度为30个字符")]
            public virtual string CusCode { get; set; }
            /// <summary>
            /// 客户名称
            /// </summary>
            [Required(ErrorMessage = "客户名称不能为空!")]
            [StringLength(30, MinimumLength = 0, ErrorMessage = "客户名称最大长度为30个字符")]
            public virtual string CusName { get; set; }
            /// <summary>
            /// 客户业务类型
            /// </summary>
            public virtual Busssiness BusssinessType { get; set; }
            /// <summary>
            /// 手机
            /// </summary>
            public virtual string Phone { get; set; }
            /// <summary>
            /// 电话
            /// </summary>
            public virtual string Tel { get; set; }
            /// <summary>
            /// 邮箱
            /// </summary>
            [RegularExpression(@"^(w) (.w )*@(w) ((.w ) )$", ErrorMessage="邮箱格式不正确!")]
            public virtual string Email { get; set; }
            /// <summary>
            /// 传真
            /// </summary>
            public virtual string Fax { get; set; }
            /// <summary>
            /// 国家
            /// </summary>
            public virtual string Country { get; set; }
            /// <summary>
            /// 地址
            /// </summary>
            public virtual string Address { get; set; }
            /// <summary>
            /// 公司名称
            /// </summary>
            public virtual string CompanyName { get; set; }
            /// <summary>
            /// 金额
            /// </summary>
            public virtual decimal Balance { get; set; }
            /// <summary>
            /// 信用额度
            /// </summary>
            public virtual decimal CreditAmount { get; set; }
            /// <summary>
            /// 状态
            /// </summary>
            public virtual CustomerStatus Status { get; set; }
            /// <summary>
            /// 快件收货商信息
            /// </summary>
            public virtual IList<ExpressCurInfo> ExpressCurInfoBy { get; set; }
            /// <summary>
            /// 客户等级
            /// </summary>
            public virtual CustomerLevel CusLevel { get; set; }
            /// <summary>
            /// 级别生效日期
            /// </summary>
            [Required(ErrorMessage = "级别生效日期不能为空!")]
            public virtual DateTime LevelEffectDate { get; set; }
            /// <summary>
            /// 客户上一次级别
            /// </summary>
            public virtual CustomerLevel CusPreLevel{get;set;}
    
            #endregion
    
            #region common method
            /// <summary>
            /// 分页获取数据
            /// </summary>
            /// <param name="filter"></param>
            /// <returns></returns>
            public static IPageOfList<CustomerInfo> GetByFilter(CustomerFilter filter)
            {
                return Dao.GetByFilter(filter);
            }
    #endregion
        }
        /// <summary>
        /// 客户业务类型
        /// </summary>
        public enum Busssiness
        {
            /// <summary>
            /// 快件
            /// </summary>
            [Description("快件")]
            ExpressDelivery = 0,
        }
        /// <summary>
        /// 客户状态
        /// </summary>
        public enum CustomerStatus
        {
            /// <summary>
            /// 启用
            /// </summary>
            [Description("启用")]
            Enable = 0,
            /// <summary>
            /// 禁用
            /// </summary>
            [Description("禁用")]
            Disabled = 1,
        }
        /// <summary>
        /// 客户等级
        /// </summary>
        public enum CustomerLevel
        {
            [Description("1万件以下")]
            One=0,
            [Description("1万-3万件")]
            Two=1,
            [Description("3万件以上")]
            Three=2
        }
    

    模型层数据:
    Node.cs,NodeMap.cs类代码如下:

    利用的是xml进行orm映射,那么那1篇就来说下代码映射。

    本文由68399皇家赌场发布于虚拟主机,转载请注明出处:澳门皇家赌场55533网址:[转]ASP.NET MVC Spring.NET N

    关键词: 68399皇家赌场 NET ASP MVC ASP.NET

上一篇:nginx日志配置指令详解

下一篇:没有了