博客
关于我
Nancy简单实战之NancyMusicStore(一):准备工作和搭建项目
阅读量:418 次
发布时间:2019-03-06

本文共 5217 字,大约阅读时间需要 17 分钟。

开发环境

在开始迁移和搭建项目之前,首先需要明确当前的开发环境配置。以下是我的开发环境设置:

  • 操作系统:Windows 10 10.0.14393
  • 开发工具:Visual Studio 2015 Community With Update 3
  • 数据库:PostgreSQL 9.6
  • 数据库管理工具:pgAdmin 4

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

在迁移数据之前,需要先备份并提取MVC MusicStore中的数据。数据分为两部分:系统相关数据和会员数据。根据项目需求,我们只需要迁移系统相关的数据,会员数据可以忽略。

系统相关的数据存储在SQL Server Compact数据库中。通过Database4打开这个数据库,然后生成相关的脚本文件。这些脚本需要进行简单的修改后,通过pgAdmin执行。

此外,还需要添加一个新的用户表。以下是新建用户表的建表语句:

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添加以下程序包:

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

添加了这些程序包后,需要移除不再使用的DLL引用。项目中只保留必要的引用,具体清单如下:

// 过滤后的引用清单
using Nancy;
using Nancy.Authentication.Forms;
using Nancy.Bootstrapper;
using Nancy.Conventions;
using Nancy.Session;
using Nancy.TinyIoc;
using NancyMusicStore.Common;

接下来,在ContentScripts文件夹中添加必要的静态资源文件。确保启动器支持静态资源访问,否则会出现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 ConfigureConventions(NancyConventions conventions)
{
base.ConfigureConventions(conventions);
conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("Scripts")
);
conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("Content")
);
}
}
}

数据模型与数据库映射

Common文件夹中创建数据模型和数据库表映射。以下是DBHelper的实现:

using Dapper;
using Npgsql;
using System.Collections.Generic;
using System.Linq;
using System.Data;
namespace NancyMusicStore.Common
{
public class DBHelper
{
private static IDbConnection OpenConnection()
{
var conn = new NpgsqlConnection(ConfigHelper.GetConneectionStr());
conn.Open();
return conn;
}
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);
}
}
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);
}
}
public static IList
Query
(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(sql, param, transaction, buffered, commandTimeout, commandType)
.ToList();
}
}
public static T QueryFirstOrDefault
(string sql,
object param = null,
IDbTransaction transaction = null,
int? commandTimeout = null,
CommandType? commandType = null)
where T : class
{
using (var conn = OpenConnection())
{
return conn.QueryFirstOrDefault
(sql, param, transaction, commandTimeout, commandType);
}
}
}
}

数据库连接配置

web.config中添加PostgreSQL的连接字符串:

总结

通过以上步骤,我们已经完成了开发环境的配置、数据迁移、项目搭建以及数据库连接设置。接下来,将开始打造NancyMusicStore的首页。希望这篇文章能为你的项目开发提供有价值的参考。

转载地址:http://erxkz.baihongyu.com/

你可能感兴趣的文章
no available service ‘default‘ found, please make sure registry config corre seata
查看>>
no connection could be made because the target machine actively refused it.问题解决
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
查看>>
No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
查看>>
No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
查看>>
No module named 'crispy_forms'等使用pycharm开发
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>
No qualifying bean of type XXX found for dependency XXX.
查看>>
No resource identifier found for attribute 'srcCompat' in package的解决办法
查看>>
no session found for current thread
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>
NO.23 ZenTaoPHP目录结构
查看>>
no1
查看>>
NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
查看>>
NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
查看>>