首页 > 代码库 > 在ASP.NET MVC4中配置Castle

在ASP.NET MVC4中配置Castle

 

   Castle是针对.NET平台的一个非常优秀的开源项目,重点是开源的哦。它在NHibernate的基础上进一步封装,其原理基本与NHibernate相同,但它较好地解决NHibernate的缺陷,从ORM(对象关系映射)到IOC(inversion of control,控制反转)容器,再到web层的MVC框架,基本上包括整个开发过程的所有内容。

VS2013 MVC4+SQL Server 2008的环境下配置Castle可以简单分为如下4个步骤

(一)引用Castle,有两种方式

   可以直接使用Nuget直接下载Castle相关组件  Castle.ActiveRecord提供ORM,Castle.Core,Castle.Windsor

   如果有备份的dll文件,可以直接引用,但一定要引用NHibernate.dll

     技术分享

(二)配置webconfig

  

<section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord"/>
这个section节点必须要位于webconfig的第一个子节点configSection里 否则就会报错
<!--注册Castle配置块,type指定ActiveRecord的程序集-->  <configSections>    <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord"/>    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />  </configSections>  <activerecord isWeb="true">    <config>      <!--配置数据库类型为SQL Server-->      <add key="connection.driver_class" value=http://www.mamicode.com/"NHibernate.Driver.SqlClientDriver" />      <!--配置数据库语言为SQL Server 2008-->      <add key="dialect" value=http://www.mamicode.com/"NHibernate.Dialect.MsSql2008Dialect" />      <!--配置数据库连接驱动-->      <add key="connection.provider" value=http://www.mamicode.com/"NHibernate.Connection.DriverConnectionProvider" />      <!--数据库连接字符串-->      <add key="proxyfactory.factory_class" value=http://www.mamicode.com/"NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle" />      <add key="connection.connection_string" value=http://www.mamicode.com/"server=.;database=LMS;integrated security=true;" providerName="System.Data.SqlClient" />    </config>  </activerecord>

 

(三)初始化Castle,生成数据库

   这里的做法有很多,在页面初始化时进行或者新建一个事件也是可以的

   比如在单独的一个aspx页面的click事件里进行:

    

    protected void btnCreate_Click(object sender, EventArgs e)        {            try            {                if (!ActiveRecordStarter.IsInitialized)                {                    IConfigurationSource source = System.Configuration.ConfigurationSettings.GetConfig("activerecord")                         as IConfigurationSource;
            //activerecord字符串要与<section name="activerecord">对应 Type[] param
={typeof(Domain.Years), typeof(Domain.Dog), typeof(Domain.Cat)};//映射类 通过数组参数一次性添加 ActiveRecordStarter.Initialize(source, param);//映射 ActiveRecordStarter.CreateSchema();//生成数据库 ActiveRecordStarter.GenerateCreationScripts("create.sql"); this.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>alert(‘创建成功‘)</script>"); } else { this.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>alert(‘创建失败‘)</script>"); } } catch (Exception ex) { throw ex; } } }

 这样就完成了Castle的配置了

 

ps 对象关系映射中要注意类要继承于Activerecord,和指定数据库表名  否则会映射失败

  

  [ActiveRecord()]//指定数据库表名,默认与类名相同    public class Years:ActiveRecordBase    {        [Property]        public string Name { get; set; }    }

 

在ASP.NET MVC4中配置Castle