繼續回到主線任務完善Miniblog SQLlite功能,有新的突破再回去闖關Electron.NET。
今天改用appsettings.json的connectionstring是否有值判斷使用哪一種資料存取:
1.假如SQLiteConnString有值使用SQLiteBlogService
2.假如MSSQLConnString有值使用MSSqlBlogService
3.假如都沒有值使用XML
"blog": {
"SQLiteConnString": "DataSource=app.db",
"MSSQLConnString": ""
},
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//..略
//決定使用XML或是SQL讀取資料
var section = Configuration.GetSection("blog");
if (section.GetValue<string>("SQLiteConnString").Trim() != "")
{
SQLiteHelper.connectionString = section.GetValue<string>("SQLiteConnString");
services.AddSingleton<IBlogService, SQLiteBlogService>();/*SQLite*/
}
else if (section.GetValue<string>("MSSQLConnString").Trim() != "")
{
SQLiteHelper.connectionString = section.GetValue<string>("MSSQLConnString");
services.AddSingleton<IBlogService, MSSqlBlogService>();/*SQL-Server*/
}
else
{
services.AddSingleton<IBlogService, FileBlogService>();/*XML*/
}
//..略
}
}
而SQLite部分使用的是輕量級System.Data.SQLite.Core
,不使用EF
程式幾乎沒有改動改動,使用幾乎是MSSqlBlogService實作內容,除了改connection類型而已,當初特意不使用T-SQL是對的。
補充SQLite SQL Script:
CREATE TABLE Post(ID nvarchar(50) NOT NULL
,Title nvarchar(250) NOT NULL
,Slug nvarchar(250) NOT NULL,Excerpt nvarchar(250) NOT NULL
,Content nvarchar(10000) NOT NULL,PubDate datetime NULL
,LastModified datetime NULL,IsPublished bit NULL
,IsMarkDown bit NULL,MarkDownContent nvarchar(10000) NULL);
CREATE TABLE Categories( PostID nvarchar(50) NOT NULL, Name nvarchar(250) NOT NULL);
CREATE TABLE Comment( ID nvarchar(50) NOT NULL, Author nvarchar(50) NOT NULL
, Email nvarchar(50) NOT NULL, Content nvarchar(250) NOT NULL, PubDate datetime NOT NULL
, IsAdmin bit NOT NULL, PostID nvarchar(50) NOT NULL);