OS : Windows 10 10.0.14393html
IDE : Visual Studio 2015 Community With Update 3web
Database : PostgreSQL 9.6sql
DBMS :pgAdmin 4數據庫
MVC MusicStore中的數據分爲兩部分:系統相關數據和MemberShip產生的用戶數據app
這裏咱們只須要系統相關的數據,Membership相關的數據就讓它見鬼去吧~~框架
系統相關的數據是存儲在SQL Server Compact,經過Database4打開這個數據庫,而後將這個數據庫生成相關的腳本,對這些腳本簡單的修改一下,拿到pg Admin 上執行。ide
而後還添加了一張新的用戶表,建表語句以下ui
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部署的時候會提示沒法訪問數據庫。spa
只須要修改 pg_hba.conf 這個配置文件3d
直接將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之大雜燴