目的:初步了解NHibernate的用法,包括数据库的CRUD, 基于ASP.NET MVC 项目模板
步骤:
- 创建ASP.NET MVC 新项目
- 使用NuGet引入FluentNHibernate
- 创建实体类(POCO)
- 创建实体类对应的映射,继承ClassMap
- 使用SQL Server Management Studio创建空数据库
- 创建NHibernateHelper类,用来读取数据库配置文件并创建数据库表,重点!!!
- 在Web.config文件中添加新建数据库的配置
- 在ASP.NET MVC中添加新XXXController,以及Action方法
- 针对上面的Action方法创建简单View
- 运行项目,并访问这个Action 方法,就能创建数据库表。
- 查看并验证数据库表是否创建
- 修改第6步不创建的代码,防止每次请求此Action都重新创建数据库表
- 接下来就是ASP.NET MVC 的CURD创建了
第一:创建ASP.NET MVC 项目
1、打开Visual Studio 2015 创建ASP.NET MVC 5项目,命名为PIS
去掉身份验证
二、利用NuGit
相关依赖
多出的引用列表项
三、在Models文件夹里创建实体类 Category和 Product。
public class Category { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Description { get; set; } }
public class Product { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Description { get; set; } public virtual decimal UnitPrice { get; set; } public virtual int ReorderLevel{ get; set; } public virtual int Discontinued { get; set; } public virtual Category Category { get; set; } }
四、映射Model,在Models中分别创建CategoryMap和ProductMap类,让它们都继承自ClassMap<T>类,代码如下
using FluentNHibernate.Mapping; namespace PIS.Models { public class CategoryMap : ClassMap<Category> { public CategoryMap() { Id(x => x.Id); Map(x => x.Name).Length(50).Not.Nullable(); Map(x => x.Description); } } }
using FluentNHibernate.Mapping; namespace PIS.Models { public class ProductMap : ClassMap<Product> { public ProductMap() { Id(x => x.Id); Map(x => x.Name).Length(50).Not.Nullable(); Map(x => x.Description); Map(x => x.UnitPrice).Not.Nullable(); Map(x => x.ReorderLevel); Map(x => x.Discontinued); References(x => x.Category).Not.Nullable(); } } }
打开SQL Server Management Studio 创建一个空数据库 PIS
在Models文件夹中新建一个NHibernateHelper类,代码如下
using FluentNHibernate.Cfg; using System; using System.Collections.Generic; using System.Linq; using System.Web; using FluentNHibernate.Cfg.Db; using NHibernate; using NHibernate.Cfg; using NHibernate.Tool.hbm2ddl; namespace PIS.Models { public class NHibernateHelper { public static ISessionFactory CreateSessionFactory() { return Fluently.Configure() .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.FromConnectionStringWithKey("PISConn"))) .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProductMap>()) .ExposeConfiguration(CreateSchema) .BuildSessionFactory(); } private static void CreateSchema(Configuration cfg) { var schemaExport = new SchemaExport(cfg); //schemaExport.SetOutputFile("c:\abc.sql"); schemaExport.Create(false, true); } } }
这段代码我不解释,在后面的文章中会详细讲解。其中注释的一行,是NHibernate生成的创建数据库脚本。
打开Web.config,在 <connectionStrings></connectionStrings>节中添加如下代码:
<add name="PISConn" connectionString="Data Source=.;Initial Catalog=PIS;User ID=sa;Password=123456;Integrated Security=True" providerName="System.Data.SqlClient"/>
新建一个CateogryController,Template选择Empty controller。在Index中添加如下代码:
var factory = NHibernateHelper.CreateSessionFactory();
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using PIS.Models; namespace PIS.Controllers { public class CategoryController : Controller { // GET: Category public ActionResult Index() { var factory = NHibernateHelper.CreateSessionFactory(); return View(); } } }
鼠标右击index()方法,在弹出的菜单选择“”,新建Index的View,运行程序,NHibernate会自动创建好数据库的架构。
视图创建完后,运行项目,把地址导航到 http://localhost:36749/Category/Index,以触发代码来创建数据库表
创建成功后,将 schemaExport.Create(false, true); 改为schemaExport.Create(false, false);
这样不会每次都创建新的数据库了。
接下来要实现CRUD操作,对数据库的增查改删操作