NHibernate with ASP.NET MVC 入门示例

时间:2021-12-15 23:28:51

目的:初步了解NHibernate的用法,包括数据库的CRUD, 基于ASP.NET MVC 项目模板

步骤:

  1. 创建ASP.NET MVC 新项目
  2. 使用NuGet引入FluentNHibernate
  3. 创建实体类(POCO)
  4. 创建实体类对应的映射,继承ClassMap
  5. 使用SQL Server Management Studio创建空数据库
  6. 创建NHibernateHelper类,用来读取数据库配置文件并创建数据库表,重点!!!
  7. 在Web.config文件中添加新建数据库的配置
  8. 在ASP.NET MVC中添加新XXXController,以及Action方法
  9. 针对上面的Action方法创建简单View
  10. 运行项目,并访问这个Action 方法,就能创建数据库表。
  11. 查看并验证数据库表是否创建
  12. 修改第6步不创建的代码,防止每次请求此Action都重新创建数据库表
  13. 接下来就是ASP.NET MVC 的CURD创建了

第一:创建ASP.NET MVC 项目

1、打开Visual Studio 2015 创建ASP.NET MVC 5项目,命名为PIS

NHibernate with ASP.NET MVC 入门示例

去掉身份验证

NHibernate with ASP.NET MVC 入门示例

二、利用NuGit

NHibernate with ASP.NET MVC 入门示例

相关依赖

NHibernate with ASP.NET MVC 入门示例

多出的引用列表项
NHibernate with ASP.NET MVC 入门示例

三、在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

NHibernate with ASP.NET MVC 入门示例

在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会自动创建好数据库的架构。

NHibernate with ASP.NET MVC 入门示例

视图创建完后,运行项目,把地址导航到 http://localhost:36749/Category/Index,以触发代码来创建数据库表

NHibernate with ASP.NET MVC 入门示例

创建成功后,将 schemaExport.Create(false, true); 改为schemaExport.Create(false, false);

这样不会每次都创建新的数据库了。

接下来要实现CRUD操作,对数据库的增查改删操作

NHibernate with ASP.NET MVC 入门示例的更多相关文章

  1. 26、ASP&period;NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱 ...

  2. ASP&period;NET MVC 入门系列教程

    ASP.NET MVC 入门系列教程 博客园ASP.NET MVC 技术专题 http://kb.cnblogs.com/zt/mvc/ 一个居于ASP.NET MVC Beta的系列入门文章,有朋友 ...

  3. &lbrack;转&rsqb;ASP&period;NET MVC 入门8、ModelState与数据验证

    ViewData有一个ModelState的属性,这是一个类型为ModelStateDictionary的ModelState类型的字典集合.在进行数据验证的时候这个属性是比较有用的.在使用Html. ...

  4. ASP&period;NET MVC 入门

    ASP.NET MVC 入门 (Learning ASP.NET MVC) 传统的WebForm发展到如今出现不少的缺陷, 比如为了解决Http的无状态WebForm模式使用了ViewsState来保 ...

  5. 25、ASP&period;NET MVC入门到精通——Spring&period;net-业务层仓储

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...

  6. ASP&period;NET MVC 入门8、ModelState与数据验证

    原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/08/1305962.html ViewData有一个ModelState的属性,这是一个类型 ...

  7. Asp&period;net MVC入门视频教程

    编程开发 > Asp.net视频教程 > Asp.net MVC入门视频教程 > 1.传统web处理方式和mvc处理方式 上传日期:2014-08-16 10:02:45  相关摘要 ...

  8. 5、ASP&period;NET MVC入门到精通——NHibernate代码映射

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...

  9. 4、ASP&period;NET MVC入门到精通——NHibernate构建一个ASP&period;NET MVC应用程序

    下周就去办理离职手续了,之前没有使用过NHibernate,只知道NHibernate是一种ORM框架,但是听说新公司是使用NHibernate在做项目,所以,我就网上找资料学习一下NHibernat ...

随机推荐

  1. 搞笑世界杯(codevs 1060)

    题目描述 Description 随着世界杯小组赛的结束,法国,阿根廷等世界强队都纷纷被淘汰,让人心痛不已. 于是有 人组织了一场搞笑世界杯,将这些被淘汰的强队重新组织起来和世界杯一同比赛.你和你的朋 ...

  2. Scrum2&period;0 项目基本完成

  3. HDU 4638 Group 树状数组 &plus; 思路

    实际上就是问这个区间编号连续的段的个数,假如一个编号连续的段有(a+b)个人,我把他们分在同一组能得到的分值为(a+b)^2,而把他们分成人数为a和b的两组的话,得到的分值就是a^2+b^2,显然(a ...

  4. poj 3181 Dollar Dayz

    题意:给定一个数p,要求用K种币值分别为1,2,3...K的硬币组成p,问方案数,1,2,2和2,2,1算一种方案即与顺序无关,n <= 1000,k <= 100// 用完全背包做了 这 ...

  5. PCR理解

    http://blog.csdn.net/niehanzi/article/details/4450154 PCR的物理意义: PCR存在于TS包的自适应域中,如下图: PCR用来同步前端编码器和后端 ...

  6. PCI&lowbar;Making Recommendations

    协作性过滤 简单理解从众多用户中先搜索出与目标用户'品味'相似的部分人,然后考察这部分人的偏爱,根据偏爱结果为用户做推荐.这个过程也成为基于用户的协作性过滤(user_based collaborat ...

  7. 从壹开始 &lbrack;vueAdmin后台&rsqb; 之三 &vert;&vert; 动态路由配置 &amp&semi; 项目快速开发

    回顾 今天VS 2019正式发布,实验一波,你安装了么?Blog.Core 预计今天会升级到 Core 3.0 版本. 哈喽大家周三好!本来今天呢要写 Id4 了,但是写到了一半,突然有人问到了关于 ...

  8. 极简科普 1:什么是 VOIP

    VoIP 的全称是 Voice over Internet Protocol.简单说,就是用过 IP 网络进行即时的语音/视频通信.注意,这里只强调了在传输过程中有使用 IP 网络,并没有说只通过 I ...

  9. Config非对称加解密

    对称加密和非对称加密区别1. 对称加密对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密.对称加密只有一个秘钥,作为私钥. 常见的对称加密算法:DES,AES,3DES等等. 2. 非对称加密 ...

  10. angular ng-file-upload

    传送门:https://github.com/danialfarid/ng-file-upload#install <script src="angular(.min).js&quot ...