失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > ASP.NET MVC4中使用NHibernate

ASP.NET MVC4中使用NHibernate

时间:2019-06-01 12:54:44

相关推荐

ASP.NET MVC4中使用NHibernate

1:下载安装NHibernate

打开 VS 新建一个 MVC4项目. 在项目名称上右击选择Manage NuGet Packages。你会看见 Manage Nuget Packages 页面. 在搜索框输入‘NHibernate’ 可以得到以下结果:

选择第一个并安装,安装完成后会引入以下两个.DLL文件

NHibernate

Lesi.Collections

2:编写Model层,你需要决定模型中的对象和它们之间的关系。现在来定义一个应用程序,用于维护员工记录(很简单,但你可以扩展的)。让我们添加新的类模型。如下所示:

1 public class EmployeeInfo 2 { 3 int _EmpNo; 4 public virtual int EmpNo 5 { 6 get { return _EmpNo; } 7 set { _EmpNo = value; } 8 } 9 string _EmpName; 10 public virtual string EmpName 11 { 12 get { return _EmpName; } 13 set { _EmpName = value; } 14 } 15 int _Salary;16 public virtual int Salary 17 { 18 get { return _Salary; } 19 set { _Salary = value; } 20 } 21 string _DeptName;22 public virtual string DeptName 23 { 24 get { return _DeptName; } 25 set { _DeptName = value; } 26 } 27 string _Designation;28 public virtual string Designation 29 { 30 get { return _Designation; } 31 set { _Designation = value; } 32 } 33 }

该类包含属性employeeinfo。这些属性将被用来与表的列映射。这些属性必须被定义为虚拟。

3:一旦映射模型类准备好了,现在就可以建数据库保存数据。对于这个简单的应用程序,我们将使用一个名为Company的SQL数据库。表的名称是employeeinfo,创建如下所示:

1 USE [Company] 2 GO 3 /****** Object: Table [dbo].[EmployeeInfo] Script Date: 1/17/ 11:22:12 AM ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 SET ANSI_PADDING ON 9 GO 10 CREATE TABLE [dbo].[EmployeeInfo]( 11[EmpNo] [int] IDENTITY(1,1) NOT NULL, 12[EmpName] [varchar](50) NOT NULL, 13[Salary] [decimal](18,0) NOT NULL, 14[DeptName] [varchar](50) NOT NULL, 15[Designation] [varchar](50) NOT NULL, 16 CONSTRAINT [PK_EmployeeInfo] PRIMARY KEY CLUSTERED 17 ( 18[EmpNo] ASC 19 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 20 ) ON [PRIMARY] 21 GO 22 SET ANSI_PADDING OFF 23 GO

4:设置映射employeeinfo.HBM.XML

在Models中建立NHibernate文件夹,在NHibernate下建立Configuration 、Mappings两个文件夹。

映射文件的命名规则默认是<modelName>.hbm.xml,在我们的案例中,它取名为employeeinfo.HBM.XML,保存在Models\Mappings,我们需要在项目中将XML文件属性改为“嵌入的资源的“。这个文件映射模型类与数据库表列的约束的主键,数据类型等文件,如下所示:

1 <?xml version="1.0" encoding="utf-8" ?> 2 <hibernate-mapping 3 xmlns="urn:nhibernate-mapping-2.2" 4 assembly="MVC4_Using_NHB" 5 namespace="MVC4_Using_NHB" 6 auto-import="true"> 7 <class name="MVC4_Using_NHB.Models.EmployeeInfo,MVC4_Using_NHB"> 8 <id name="EmpNo" access="property" column="EmpNo" type="Int32"> 9 <generator class="native"></generator> 10 </id> 11 <property name="EmpName" access="property" 12 column="EmpName" type="String"></property> 13 <property name="Salary" access="property" 14 column="Salary" type="Int32"></property> 15 <property name="DeptName" access="property" 16 column="DeptName" type="String"></property> 17 <property name="Designation" access="property" 18 column="Designation" type="String"></property> 19 </class> 20 </hibernate-mapping>

上述XML文件是employeeinfo类和属性之间的映射的列。

注:默认情况下没有智能代码提示,可以实现添加nhibernate-configuration.xsd和nhibernate-mapping.xsd文件到VS的以下路径:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Xml\Schemas,就会有代码提示。

5:一旦定义了映射,就可以定义应用程序的NHibernate配置。这提供了连接数据库信息,连接字符串,用于连接映射文件。在项目中Models\Configuration文件夹建一个新的XML文件;该文件的名称是‘hibernate.CFG.XML的。在添加以下配置:

1 <?xml version="1.0" encoding="utf-8" ?> 2 <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 3 <session-factory> 4 <property name="connection.provider"> 5 NHibernate.Connection.DriverConnectionProvider</property> 6 <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property> 7 <property name="connection.driver_class"> 8 NHibernate.Driver.SqlClientDriver</property> 9 <property name="connection.connection_string">Data Source=.;Initial Catalog=Company;Integrated Security=SSPI</property> 10 <property name="show_sql">false</property> 11 </session-factory> 12 </hibernate-configuration>

6:现在是时候添加一些代码来做对数据库表的映射模型进行CRUD操作。NHibernate提供用于执行操作的各个类和接口,其中一些是用于实现他们如下:

ISession:单线程,生命期较短的对象,代表应用程序和持久化层之间的一次对话。封装了一个连接

ISessionFactory:它是Session的工厂,是ConnectionProvider的客户。可以持有一个可选的(第二级)数据缓存,可以在进程级别或集群级别保存的可以在事物中重用的数据。。该方法的opensession()”提供了创建Session的功能。每个数据库要求一个会话工厂。执行是线程安全的,可以一直到应用程序的生存时间。

正如你可以看到下面的代码,我们必须配置对象提供的配置文件的绝对路径,也为其提供了目录信息的所有映射文件将被保存(在opensession法)

iquery:这表示是NHibernate查询一个对象。

View Code

生成项目并确保它没有错误。

7:添加新控制器,命名为“employeeinfocontroller”。添加下面的控制器类中的动作方法:

1 using MVC4_Using_NHB.Models; 2 using System.Web.Mvc; 3 namespace MVC4_Using_NHB.Controllers 4 { 5 public class EmployeeInfoController : Controller 6 { 7 EmployeeInfoDAL objDs; 8 public EmployeeInfoController() 9 { 10 objDs = new EmployeeInfoDAL(); 11 } 12 // 13 // GET: /EmployeeInfo/ 14 public ActionResult Index() 15 { 16 var Employees = objDs.GetEmployees(); 17 return View(Employees); 18 } 19 // 20 // GET: /EmployeeInfo/Details/521 public ActionResult Details(int id) 22 { 23 return View(); 24 } 25 // 26 // GET: /EmployeeInfo/Create 27 public ActionResult Create() 28 { 29 var Emp = new EmployeeInfo(); 30 return View(Emp); 31 } 32 // 33 // POST: /EmployeeInfo/Create 34 [HttpPost] 35 public ActionResult Create(EmployeeInfo Emp) 36 { 37 try 38 { 39 objDs.CreateEmployee(Emp); 40 return RedirectToAction("Index"); 41 } 42 catch 43 { 44 return View(); 45 } 46 } 47 // 48 // GET: /EmployeeInfo/Edit/5 49 public ActionResult Edit(int id) 50 { 51 var Emp = objDs.GetEmployeeById(id); 52 return View(Emp); 53 } 54 // 55 // POST: /EmployeeInfo/Edit/5 56 [HttpPost] 57 public ActionResult Edit(int id, EmployeeInfo Emp) 58 { 59 try 60 { 61 objDs.UpdateEmployee(Emp); 62 return RedirectToAction("Index"); 63 } 64 catch 65 { 66 return View(); 67 } 68 }69 // 70 // GET: /EmployeeInfo/Delete/5 71 public ActionResult Delete(int id) 72 { 73 var Emp = objDs.GetEmployeeById(id); 74 return View(Emp); 75 } 76 // 77 // POST: /EmployeeInfo/Delete/5 78 [HttpPost] 79 public ActionResult Delete(int id,FormCollection collection) 80 { 81 try 82 { 83 var Emp = objDs.GetEmployeeById(id); 84 objDs.DeleteEmployee(Emp); 85 return RedirectToAction("Index"); 86 } 87 catch 88 { 89 return View(); 90 } 91 } 92 }

每个动作方法调用的employeeinfodal类定义的方法。现在只要为每个Action添加视图方法,就可以运行连接到得到以下结果:

如果觉得《ASP.NET MVC4中使用NHibernate》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。