利用一个Demo说明Castle+NHibernate的实现
来源:互联网 发布:梁山伯与祝英台网络剧 编辑:程序博客网 时间:2024/05/17 05:01
Castle简单介绍
Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。
官方网站:http://www.castleproject.org/
提到Castle就不得不说说IOC容器.
Ioc介绍
IOC(Inversion of Control,反转控制)是一种面向对象设计原则, 是面向对象领域新兴的编程思想 。其原理是组件本身并不与其他组件建立直接的依赖关系,依赖关系将在组件之外的某个地方建立。这样做主要是为了解耦类之间的关系,使得类更加容易测试、重用,系统更加容易组装和配置。这些先进技术极大促进了软件开发的发展。
还有一种解释:控制反转意味着在系统开发过程中,设计的类将交由容器去控制,而不是在类的内部去控制,类与类之间的关系将交由容器处理,一个类在需要调用另一个类时,只要调用另一个类在容器中注册的名字就可以得到这个类的实例,与传统的编程方式有了很大的不同,”不用你找,我来提供给你”,这就是控制反转的含义.
其实说明白了, 反转控制就是依赖注入,两者概念一样.最终目标是都是为了降低系统的耦合关系.
利用一个Demo实现Castle.net
新建一个解决方案
在测试类中添加一个web.config,然后在web.config中添加配置节点
注意:在isweb处修改为fasle,由于是用单元测试来进行测试,不会web项目,那么就要为fasle.
为web项目的话就要修改为true
<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=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/></configSections><activerecord isWeb="fasle"><config><add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/><add key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/><add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/><add key="connection.connection_string" value="Initial Catalog=DemoCastle;Data Source=.;uid=sa;password=123456;"/><add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/></config></activerecord>
在Global.asax中添加source来源
protected void Application_Start() { IConfigurationSource source = System.Configuration.ConfigurationManager.GetSection("activerecord") as IConfigurationSource; ActiveRecordStarter.Initialize(typeof(Users).Assembly, source); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //用到IOC的时候才会用到 //container = Container.Instance; }
添加一个模型类利用castle中的activerecord配置映射
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Castle.ActiveRecord;//需要添加Castle.ActiveRecord引用using System.ComponentModel.DataAnnotations;namespace Domain{
[PrimaryKey] //设置为主键 public int ID { get; set; } /// <summary> /// Users:实体类(属性说明自动提取数据库字段的描述信息) /// </summary> [ActiveRecord] public class Users :ActiveRecordBase//继承ActiveRecordBase { /// <summary> /// 用户名称 /// </summary> [Property(NotNull = true, Length = 8)] [Required] [Display(Name = "用户名称")] public string UserName { get; set; } /// <summary> /// 用户的类型 /// </summary> [Property(NotNull = false)] [Display(Name = "用户类型")] public string UserType { get; set; } /// <summary> /// 用户密码 /// </summary> [Property(NotNull = true, Length = 12)] [Required] [DataType(DataType.Password)] [Display(Name = "用户密码")] public string Password { get; set; } }}
code first需要先在数据库中先创建一个数据库,code first通过模型映射配置会自动创建数据表
数据库名为config中的 Initial Catalog=DemoCastle,根据自己的情况创建数据库。记住只需要创建数据库就行,因为是code first。
后面我会对模型优先、数据优先、和代码优先进行详解。
创建DemoCastle数据库。
在Global.asax添加如下代码,红色标记是添加的Castle的引用文件。大家可以到网上进行搜索下载。要是没有的话可以在我的博客资源中下载Libs包
解压后放到自己的项目里,添加引用的时候就在项目的libs里面添加引用
下载地址:http://download.csdn.net/detail/xhl_james/9873668
我标记为红色边框的是必须添加到自己的项目引用中来
using Castle.ActiveRecord;using Castle.ActiveRecord.Framework;using Models;using System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Web;using System.Web.Mvc;using System.Web.Optimization;using System.Web.Routing;namespace CastleDemo{ public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { IConfigurationSource source = ConfigurationManager.GetSection("activerecord") as IConfigurationSource; ActiveRecordStarter.Initialize(typeof(Users).Assembly, source); //创建数据库(第一次运行需要配置),要是第一次创建成功以后就不需要生成数据库了 ActiveRecordStarter.CreateSchema();//生成数据库 AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } }}
最后只需要通过创建的MVC项目运行就会通过Global.asax添加的代码生成对应的表。
注意:对于不是很熟悉的千万不要在模型类中随便添加映射。对于Code first还不是那么的严重,要是通过数据优先(data first)的话一定要注意模型中的属性和
数据库中的字段类型要相同。
通过创建好以后我们试一试条用ActiveRecordBase中的Create方法创建数据。为了方便起见我就直接在Global.asax中写一个创建。
大家在开发过程中千万不要这么做
最后总结:
Castle是针对.NET平台下的一个非常优秀的开源项目,从数据访问框架 ORM到依赖注入容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。
Castle功能很强大,我们这个架构只是用到了冰山一角,其他功能还需继续研究。
希望大家多多支持,谢谢!
- 利用一个Demo说明Castle+NHibernate的实现
- C#,Castle,NHibernate,Oracle,最简单的实现
- 利用QtQuick实现UI的一个Demo
- 利用KNN算法实现的一个demo
- 利用脚本实现计算字段的一个demo
- 利用属性动画Animator实现的一个小demo,
- Castle+Nhibernate初试
- NHibernate 3.2或以上的版本就没有 NHibernate.ByteCode.Castle.dll,NHibernate.ByteCode.LinFu.dll, NHibernate.Byt
- 基于.Net(Castle+nhibernate)的松散式工作流引擎(一)
- Nhibernate第一次做的Demo
- 利用IOC—— Castle进行对象映射,以及结合Nhibernate访问数据库
- 一个NHibernate的介绍
- 一个NHibernate的BUG
- castle Nhibernate调用存储过程
- 利用redis的订阅和发布来实现实时监控的一个DEMO(Python版本)
- Windows下利用原始套接字实现的一个抓包程序Demo
- Windows下利用原始套接字实现的一个抓包程序Demo
- 利用读写锁简单实现一个缓存demo
- html中常用的标签-表单标签
- JNDI
- 使用 Docker Toolbox 自动创建 Swarm 集群+Portainer 图形化管理的脚本
- ViewPager系列之 仿魅族应用的广告BannerView
- 淘淘商城系列——生成订单
- 利用一个Demo说明Castle+NHibernate的实现
- AngularJS 入门5-依赖注入
- Tensorflow-高级封装tflearn
- js解析json读取List中的实体对象示例
- AngularJS 入门6-路由
- ViewPager系列之 打造一个通用的ViewPager
- win32(8)--内存映射
- 注册页面
- DAY2 Python小白学习NOTE