NHibernate with ASP.NET MVC 入门示例
目的:初步了解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().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().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操作,对数据库的增查改删操作
NHibernate with ASP.NET MVC 入门示例的更多相关文章
- 26、ASP.NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱 ...
- ASP.NET MVC 入门系列教程
ASP.NET MVC 入门系列教程 博客园ASP.NET MVC 技术专题 http://kb.cnblogs.com/zt/mvc/ 一个居于ASP.NET MVC Beta的系列入门文章,有朋友 ...
- [转]ASP.NET MVC 入门8、ModelState与数据验证
ViewData有一个ModelState的属性,这是一个类型为ModelStateDictionary的ModelState类型的字典集合.在进行数据验证的时候这个属性是比较有用的.在使用Html. ...
- ASP.NET MVC 入门
ASP.NET MVC 入门 (Learning ASP.NET MVC) 传统的WebForm发展到如今出现不少的缺陷, 比如为了解决Http的无状态WebForm模式使用了ViewsState来保 ...
- 25、ASP.NET MVC入门到精通——Spring.net-业务层仓储
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...
- ASP.NET MVC 入门8、ModelState与数据验证
原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/08/1305962.html ViewData有一个ModelState的属性,这是一个类型 ...
- Asp.net MVC入门视频教程
编程开发 > Asp.net视频教程 > Asp.net MVC入门视频教程 > 1.传统web处理方式和mvc处理方式 上传日期:2014-08-16 10:02:45 相关摘要 ...
- 5、ASP.NET MVC入门到精通——NHibernate代码映射
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...
- 4、ASP.NET MVC入门到精通——NHibernate构建一个ASP.NET MVC应用程序
下周就去办理离职手续了,之前没有使用过NHibernate,只知道NHibernate是一种ORM框架,但是听说新公司是使用NHibernate在做项目,所以,我就网上找资料学习一下NHibernat ...
随机推荐
- POJ2431--Expedition(优先队列)
Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Bein ...
- POJ1742--Coins(动态规划)
People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony ...
- 20155326 《Java程序设计》第8周学习总结
20155326 <Java程序设计>第8周学习总结 教材学习内容总结 NIO (1)NIO使用频道来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区容量,在缓冲区中对感兴趣的数据区块 ...
- Alpha冲刺 - (10/10)
Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 本人负责的模块(共享编辑)的前端代码 ...
- Android Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
出错原因:在查询整个sqlite数据库时,没有查询到 "_id" 这一列. 原来的代码是:mSQLiteDatabase.query(table_name, new String[ ...
- 关于FPGA的一些小见解
Xilinx FPGA配置bit流文件 Xilinx FPGA的供电是采用USB作为电源,使用Verilog HDL或VHDL实现的逻辑电路通过Xilinx的综合工具生成bit流文件,通过Digile ...
- bootstrap阶段测验【问题】
- poj2094
很不错的一道题,很让我见识到了差分序列的运用的神奇之处..一下是从北邮BBS看到的题解,写得很清楚..这边就直接转过来. uRLhttp://bbs.byr.cn/#!article/ACM_ICPC ...
- Java学习--循环语句
1. break public class BreakDemo{ // 完成一个四则运算的功能 public static void main(String args[]){ for(int i=0; ...
- STF环境搭建(ubuntu)
一,环境搭建 1. linux 一些基础的工具要有: sudo apt-get update sudo apt-get install git sudo apt-get install lib32st ...