• Nancy简单实战之NancyMusicStore(一):准备工作和搭建项目


    开发环境

    OS : Windows 10 10.0.14393

    IDE : Visual Studio 2015 Community With Update 3

    Database : PostgreSQL 9.6

    DBMS :pgAdmin 4

    迁移数据与配置PG远程访问

    MVC MusicStore中的数据分为两部分:系统相关数据和MemberShip产生的用户数据

    database

    这里我们只需要系统相关的数据,Membership相关的数据就让它见鬼去吧~~

    系统相关的数据是存储在SQL Server Compact,通过Database4打开这个数据库,然后将这个数据库生成相关的脚本,对这些脚本简单的修改一下,拿到pg Admin 上执行。

    然后还添加了一张新的用户表,建表语句如下

    CREATE TABLE public.sysuser
    (
        sysuserid character varying(100) COLLATE pg_catalog."default" NOT NULL,
        sysusername character varying(100) COLLATE pg_catalog."default" NOT NULL,
        sysuserpassword character varying(100) COLLATE pg_catalog."default" NOT NULL,
        sysuseremail character varying(100) COLLATE pg_catalog."default",
        CONSTRAINT sysuser_pkey PRIMARY KEY (sysuserid)
    )
    WITH (
        OIDS = FALSE
    )
    
    TABLESPACE pg_default;
    
    ALTER TABLE public.sysuser
        OWNER to dev;
    

    数据库和数据表已经建好了,下面还要配置PG可以被远程访问,不然后面在Linux部署的时候会提示无法访问数据库。

    只需要修改 pg_hba.conf 这个配置文件

    直接将host all all 127.0.0.1/32 md5修改为以下配置 host all all 0.0.0.0/0 md5

    如果不希望允许所有IP远程访问,则可以将上述配置项中的0.0.0.0设定为特定的IP值。

    搭建项目

    新建一个空的Web项目,命名为NancyMusicStore,通过Nuget添加本实战用到的相关程序集。

    在Package Manager Console窗口通过安装下面的package

    Install-Package Nancy -Version 1.4.3
    
    Install-Package Nancy.Hosting.Aspnet -Version 1.4.1
    
    Install-Package Nancy.Viewengines.Razor -Version 1.4.3
    
    Install-Package Nancy.Authentication.Forms -Version 1.4.1
    
    Install-Package Dapper
    
    Install-Package Npgsql -Version 3.1.9
    

    相关package说明:

    • Nancy 这个就不用说了,Nancy框架的根

    • Nancy.Hosting.Aspnet 项目基于ASP.NET的宿主环境的

    • Nancy.Viewengines.Razor 项目用到的模板引擎,也是我们最熟悉的Razor

    • Nancy.Authentication.Forms 项目用到的身份认证组件,替代MVC MusicStore中的Membership

    • Dapper,轻量级ORM

    • Npgsql,访问pg的驱动

    添加了不少有用的东西,自然也要干掉不少没有用的东西!!

    移除掉没有用到的DLL引用,具体剩下的如下图所示:

    相关引用

    可以看到引用十分简洁!

    在项目新建两个文件夹,Content和Scripts,把需的资源文件从MVC MUSICSTORE中添加进来。

    其中Content文件夹只需要下面的几个:

    content

    Scripts文件夹只需要下面两个:

    scripts

    本地的静态资源文件,不是简单的引用就能够使用的。还要在启动器中对静态资源文件的访问支持,如果不添加,资源文件就会报404的错误。

    所以我们要建个启动器类:CustomBootstrapper,具体内容如下:

    using Nancy;
    using Nancy.Authentication.Forms;
    using Nancy.Bootstrapper;
    using Nancy.Conventions;
    using Nancy.Session;
    using Nancy.TinyIoc;
    using NancyMusicStore.Common;
    
    namespace NancyMusicStore
    {
        public class CustomBootstrapper : DefaultNancyBootstrapper
        {
            protected override void ApplicationStartup(TinyIoCContainer container,IPipelines pipelines)
            {
                //Prevent errors on Linux
                StaticConfiguration.DisableErrorTraces = false;
            }
            
            protected override void ConfigureApplicationContainer(TinyIoCContainer container)
            {
                base.ConfigureApplicationContainer(container);                 
            }
    
            protected override void ConfigureConventions(NancyConventions conventions)
            {
                base.ConfigureConventions(conventions);
                conventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Scripts"));
                conventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Content"));
            }
        }
    }
    

    下面就建立相应的数据模型与数据库的表映射:

    models

    数据和模型都有了,下面就在web.config中添加pg的连接字符串:

     <connectionStrings>
         <add name="pgsqlConn" connectionString="Host=127.0.0.1;Username=dev;Password=123456;Database=nancymusicstore;" />
     </connectionStrings>
    

    同时在项目新建一个Common文件夹,在里面添加两个公共的操作类,一个是对Dapper的简单封装DBHelper,另一个是对配置文件的封装ConfigHelper。

    首先是ConfigHelper:

    using System.Configuration;
    
    namespace NancyMusicStore.Common
    {
        public class ConfigHelper
        {
            public static string GetAppSettingByKey(string key)
            {
                return ConfigurationManager.AppSettings[key].ToString();            
            }
    
            public static string GetConneectionStr()
            {
                return ConfigurationManager.ConnectionStrings["pgsqlConn"].ConnectionString.ToString();
            }
        }
    }
    

    包含两个方法,一个读取appsetting的方法,一个是读取连接字符串的方法。主要是用了System.Configuration来处理。

    然后是DBHelper:

    using Dapper;
    using Npgsql;
    using System.Collections.Generic;
    using System.Linq;
    using System.Data;
    
    namespace NancyMusicStore.Common
    {
        public class DBHelper
        {
            //open connection       
            private static IDbConnection OpenConnection()
            {
                var conn = new NpgsqlConnection(ConfigHelper.GetConneectionStr());
                conn.Open();
                return conn;
            }
    
            //execute 
            public static int Execute(string sql, object param = null, IDbTransaction transaction = null,
                int? commandTimeout = null, CommandType? commandType = null)
            {
                using (var conn = OpenConnection())
                {
                    return conn.Execute(sql, param, transaction, commandTimeout, commandType);
                }
            }
    
            //execute 
            public static object ExecuteScalar(string cmd, object param = null, IDbTransaction transaction = null,
                int? commandTimeout = null, CommandType? commandType = null)
            {
                using (var conn = OpenConnection())
                {
                    return conn.ExecuteScalar(cmd, param, transaction, commandTimeout, commandType);
                }
            }
    
            //do query and return a list
            public static IList<T> Query<T>(string sql, object param = null, IDbTransaction transaction = null,
                bool buffered = true, int? commandTimeout = null, CommandType? commandType = null) where T : class
            {
                using (var conn = OpenConnection())
                {
                    return conn.Query<T>(sql, param, transaction, buffered, commandTimeout, commandType).ToList();
                }
            }
    
            //do query and return the first entity
            public static T QueryFirstOrDefault<T>(string sql, object param = null, IDbTransaction transaction = null,
                int? commandTimeout = null, CommandType? commandType = null) where T : class
            {
                using (var conn = OpenConnection())
                {
                    return conn.QueryFirstOrDefault<T>(sql, param, transaction, commandTimeout, commandType);
                }
            }
        }
    }
    

    这里只是对Dapper加了一层封装,其实是可有可无的,是为了Module里面的代码比较简洁才加的。

    而且案例调用的全部是存储过程,在项目代码中看不到SQL语句,只能看到存储过程的名字。

    至此,我们的准备工作和项目已经搭建好了!

    下一篇将开始打造我们NancyMusicStore的首页了!

    本文也已经同步到 Nancy之大杂烩

  • 相关阅读:
    arcgis server10.2自带打印模板路径
    【js笔记】数组那些事[0]
    微信打开网页不能下载的解决
    CSS里一个奇怪的属性
    存一些有用的CSS
    【JS笔记】闭包
    关于百度空间的关闭
    数据校验插件开发
    JavaScript 内存机制
    手写JQuery 的框架的实现
  • 原文地址:https://www.cnblogs.com/catcher1994/p/6288062.html
Copyright © 2020-2023  润新知