开发环境

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产生的用户数据

这里我们只需要系统相关的数据,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文件夹只需要下面的几个:

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"));
}
}
}

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

数据和模型都有了,下面就在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之大杂烩

Nancy简单实战之NancyMusicStore(一):准备工作和搭建项目的更多相关文章

  1. Nancy简单实战之NancyMusicStore(六):写在最后

    前言 由于公司搬家后,住的地方离上班的地方远了N倍,以前是走路十多分钟就可以到公司的,上班时间也从9:00提早到8:30 现在每天上班都是先坐公交,然后再坐地铁,在这段路上比较浪费时间而且每天都是要6 ...

  2. Nancy简单实战之NancyMusicStore(三):完善商品信息与管理

    前言 上一篇,我们做了不少准备,并且还把我们NancyFx音乐商城的首页打造好了.这一篇主要是完善我们在首页的商品浏览问题和添加对商品的管理. 下面开始正题: 商品详情 首先是查看单个商品的详情: 先 ...

  3. Nancy简单实战之NancyMusicStore(四):实现购物车

    前言 上一篇,我们完成了商品的详情和商品的管理,这一篇我们来完成最后的一个购物车功能. 购物车,不外乎这几个功能:添加商品到购物车,删除购物车中的商品,对购物车中的商品进行结算. MVC MusicS ...

  4. Nancy简单实战之NancyMusicStore(二):打造首页

    前言 继上一篇搭建好项目之后,我们在这一篇中将把我们NancyMusicStore的首页打造出来. 布局 开始首页之前,我们要先为我们的整个应用添加一个通用的布局页面,WebForm中母版页的概念. ...

  5. Nancy简单实战之NancyMusicStore(五):部署上线

    前言 经过本系列前面四篇文章,NancyMusicStore已经开发完成了,下面就差部署上线了,我们会在两个不同的环境部署.其实之前的文章也有讲解在 Linux下部署的相关事宜.下面开始本文的内容. ...

  6. vue2.0项目实战(2)使用 vue-cli 搭建项目

    Vue-cli是官方推荐的快速构建单页应用的脚手架.官方给的建议,如果你是初次尝试Vue,哪就老老实实用普通的书写引入js文件,这里牵扯太多的东西,例如webpack .npm .nodejs 等等, ...

  7. 移动端web开发初探之Vuejs的简单实战

    这段时间在做的东西,是北邮人论坛APP的注册页.这个注册页是内嵌的网页,因为打算安卓和IOS平台同时使用.因此实际上就是在做移动端的web开发了. 在这过程中遇到了不少有意思的东西. DEMO的git ...

  8. Element ui结合springboot的简单实战

    Eelment UI简单实战 前端开发 1 创建项目,导入element ui(略) 2 大致设计出想要的效果,如下 3 创建包 根据设计的大致模样在项目的components中创建对应的包,方便以后 ...

  9. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

随机推荐

  1. ural1628 White Streaks

    White Streaks Time limit: 1.0 secondMemory limit: 64 MB The life of every unlucky person has not onl ...

  2. hive第二篇----hive中partition如何使用

    一.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表 ...

  3. php 依赖注入容器

    原文: http://blog.csdn.net/realghost/article/details/35212285 https://my.oschina.net/cxz001/blog/53316 ...

  4. rest第一篇

    rest的作用 : 以http请求的格式提供数据 实际项目中,定义一个模块,从http请求中拿参数,然后访问mysql数据库得到数据,返回给http请求.

  5. Sematic库系列一

    最近在做项目时采用了sematic css 库,由于这个库的资料太少,在做项目中遇到很多问题,在这里做一些记录 1. 下拉框demo HTML 代码 <div class="field ...

  6. jsoup的介绍使用(转)

    jsoup文档: http://www.open-open.com/jsoup/ 原链接: http://www.oschina.net/question/12_14127 jsoup 简介 Java ...

  7. linux在线预览pdf文件开发思路

    准备:swftools,flexpaper 基本思路: 1,将pdf文件转化成swf文件 2,使用flexpaper预览swf文件 主要代码: 1,在linux中安装swftools.官网下载swft ...

  8. 网站环境apache + php + mysql 的XAMPP,如何实现一个服务器上配置多个网站?

    xampp 是一个非常方便的本地 apache + php + mysql 的调试环境,在本地安装测试 WordPress 等各种博客.论坛程序非常方便.今天我们来给大家介绍一下,如何使用 XAMPP ...

  9. 黄聪:VPS用轻松备份工具备份Wordpress,文件夹通配符

    db;log;wp-admin;wp-includes;temp;upgrade;twentyfourteen;twentyfifteen;twentysixteen;twentythirteen;t ...

  10. 职业定位(移动端、ios开发、Android开发)

    移动端 移动端webapp开发必备知识:http://www.chinaz.com/manage/2012/1128/283974.shtml 设计一款好的移动App,有哪些基本规则?http://w ...