在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="NHibernate.Driver.SqlClientDriver" /> <!--配置数据库语言为SQL Server 2008--> <add key="dialect" value="NHibernate.Dialect.MsSql2008Dialect" /> <!--配置数据库连接驱动--> <add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" /> <!--数据库连接字符串--> <add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle" /> <add key="connection.connection_string" value="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; } }