zoukankan      html  css  js  c++  java
  • NHibernate with ASP.NET MVC 入门示例

    目的:初步了解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

    去掉身份验证

    二、利用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操作,对数据库的增查改删操作

  • 相关阅读:
    jquery ui draggable,droppable 学习总结
    VSCode设置网页代码实时预览
    ionic3-修改APP应用图标(icon)和APP启动界面(Splash)
    Ionic3页面的生命周期
    videogular2 在ionic3项目里报错(rxjs_1.fromEvent is not a function)
    IDEA的maven项目的netty包的导入(其他jar同)
    maven的安装与项目的创建
    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    使用二分法查询二维整型数组的值(找到返回其坐标)
    乐观锁以及悲观锁
  • 原文地址:https://www.cnblogs.com/wanghaibin/p/5534645.html
Copyright © 2011-2022 走看看