您的位置:首页 > 编程语言 > ASP

NHibernate with ASP.NET MVC 入门示例

2016-05-27 16:41 926 查看
目的:初步了解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操作,对数据库的增查改删操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: