SQLIte 操作方便,簡單小巧,這裡筆者就不再過多介紹,感興趣可以到以下博文 https://blog.csdn.net/qq_31930499/article/details/80420246 文章介紹創建ASP.NET Core 程式,創建模型、上下文,生成資料庫,對資料庫增刪查改。 並對每個 ...
SQLIte 操作方便,簡單小巧,這裡筆者就不再過多介紹,感興趣可以到以下博文
https://blog.csdn.net/qq_31930499/article/details/80420246
文章介紹創建ASP.NET Core 程式,創建模型、上下文,生成資料庫,對資料庫增刪查改。
並對每個過程進行詳細介紹,使初學者儘快瞭解內容和相關知識,避免對某一知識點懷疑、卡在某個位置。
過程&目錄
1 新建ASP.NET Core MVC 應用
1.1 新建MVC應用
1.2 引入NuGet 包
2 新建模型和上下文
2.1 新建模型類
2.2 新建上下文
3 配置服務
4 生成資料庫
5 使用工具管理SQLite文件
6 生成增刪查改基架
7 數據驗證
1 新建ASP.NET Core MVC 應用
1.1 新建MVC應用
打開Visual Studio 2017,新建 ASP.NET Web應用程式,選擇 MVC(模型視圖控制器)。
1.2 引入NuGet 包
需要 引入
- microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Sqlite
引入教程
點擊
依賴項
-右鍵
--管理NuGet 程式包
輪流輸入並安裝 microsoft.EntityFrameworkCore 、 Microsoft.EntityFrameworkCore.Sqlite,下麵附過程
註:
版本請選擇與自己 ASP.NET Core 版本接近的。
筆者版本 ASP.NET Core 版本為 2.1 ,選擇的 NuGet 包版本為 2.11。
如果你選擇版本後,發現報錯,可以再進入 NuGet 重新刪除安裝。
出現更新提示千萬不用更新。
2 新建模型和上下文
這一步建立模型和上下文,後面將會根據這裡的代碼生成資料庫和資料庫表!
需要建立一個上下文類和模型類,把模型類包含在上下文類中,上下文類中包含進來的模型類,將會生成對應的資料庫表。
下麵這代碼不用自己操作,只需要看就行。(註意紅色加粗部分)
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace WebApplication1.Models { public class SqlContext:DbContext { public SqlContext(DbContextOptions<SqlContext> Options):base(Options) { } public DbSet<A> A { get; set; } //在資料庫中生成數據表A } public class A { public int ID { get; set; }
} public class B { public int ID { get; set; } } }
上面代碼,有三個類,
- 其中 SqlContext 類是上下文類,
- A、B類為模型類,
- 但是,只讓A生成資料庫表,而B不會生成資料庫表。
- A、B都是模型類,因為可以被生成資料庫表,所以A也可以叫實體類,B因為沒有 DbSet<B> ,所以B叫模型類,不叫實體類。
- A類將會生成一個真實的資料庫中的表,有對應關係,所以,他是“實體類”。
- B類沒有對應的存在,只是模型,沒有實際存在的對象,所以只是叫“模型類”。
2.1 新建模型類
上面代碼把模型類、上下文類放到同一個文件 SqlContext.cs,這樣可讀性不太好。
因為一個模型類,代表一個數據表,上下文類相當於一個配置類,一個資料庫有幾十個表,每個表有幾個列,這樣會使文件內容過於複雜。
我們可以降低耦合,每個類文件只存在一個類,每個類代表一個表,你要創建幾個表,就對應寫幾個類。
實際操作
在 Models 文件夾中
- 新建一個類 Users.cs
- 在類中直接寫代碼
public int ID { get; set; } //主鍵 public string Name { get; set; } //用戶名稱 public int Age { get; set; } //用戶年齡 public int Number { get; set; } //用戶手機號碼
如圖
註:
一個模型類 對應 一個數據表(Table)
模型類的一個屬性 對應一個列。
模型類只應出現屬性,不應該出現方法等。
筆者這裡只寫一個表,如果你想要多個表,可以新建其它類,然後在上下文類中加入。
2.2 新建上下文
上面已經建立模型類,模型類將成為數據表(Table)本身。然而他們不能直接對應生成數據表,需要上下文來對模型類映射成數據表,不然他們只是普通的類。
在 Models 目錄新建 類 MyContext.cs
在頭部引入 EF( EntityFrameworkCore )
using Microsoft.EntityFrameworkCore;
重寫 MyContext 類
步驟1
public class MyContext 改成 public class MyContext:DbContext //表示該類為上下文類,資料庫名稱為 My,類名稱為什麼,資料庫名就為什麼
步驟2
在MyContext類中寫一個構造函數
public MyContext(DbContextOptions<MyContext> options) : base(options) { }
這個構造函數涉及到依賴註入,這裡不再贅述,只需要知道這個構造函數能夠配置相關設置。
這裡的構造函數內容為空,因為暫時沒有什麼要配置的。
步驟3
在構造函數下麵加上代碼,對模型類進行映射。
public DbSet<Users> Uaa { get; set; } //Dbset 映射成一個表 //Dbset<Users> 裡面的Users即為使用的模型類 //Uaa Users 類在資料庫生成的名稱
註:
上面代碼表示以模型類Users為基礎,在資料庫中生成 名為 Uaa 的 表。
一個上下文對應 一個 資料庫,上下文類 MyContext,Context 前面的部分將成為資料庫名稱。例如 asdwadaaContext,將生成資料庫asdwadaa。
一個模型類 對應 一個數據表(Table)
完整代碼如下
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace WebApplication1.Models { public class MyContext:DbContext { public MyContext(DbContextOptions<MyContext> options) : base(options) { } public DbSet<Users> Uaa { get; set; } } }
生成的效果圖預覽
3 配置服務
為了讓應用生成資料庫、使用到這個資料庫,需要在 Startup.cs 增加代碼
在頭部引入三個 庫
using WebApplication1.Models; //可能命名不同 using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Sqlite;
然後為 應用註入服務,有以下方式
(後面再解釋作用,現在先瞭解,不用加)
1 直接寫字元串
在 Startup.cs 增加代碼
string connecttext = "Filename=F:\\MY.DB"; services.AddDbContext<MyContext>(options=>options.UseSqlite(connecttext));
2 使用JSON
在 appsettings.json 文件加入內容(紅色部分)
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"MyContext": "Filename=F:\\MY.DB"
}
}
然後 在 Startup.cs 增加代碼
string connecttext = Configuration.GetConnectionString("MyContext"); services.AddDbContext<MyContext>(options=>options.UseSqlite(connecttext));
註:
以上兩種方式,connecttext 變數的作用是獲取資料庫連接字元串,此變數沒有特殊意義,只是為了增加可讀性。
SQLite的連接字元串,只需要寫 "Filename=[絕對路徑]"
services.AddDbContext<MyContext>(options=>options.UseSqlite(“連接字元串”));
表示
嚮應用註入DbContext (資料庫上下文服務),註入的上下文類型為 MyContext>
(options=>options.UseSqlite(“連接字元串”)
是 lambda 表達式,表示使用 sqlite 資料庫,參數是連接字元串。Lambda 表達式屬於C# 基礎知識,不會的話,先記著,以後查找資料。
來實際操作
請使用複製上面 方式一 的代碼,然後在 Startup.cs 類 -- ConfigureServices 方法裡加入
直接複製下麵代碼覆蓋 ConfigureServerices
public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); string connecttext = "Filename=F:\\MY.DB"; services.AddDbContext<MyContext>(options => options.UseSqlite(connecttext)); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); }
註:
SQLite 資料庫文件,可以不加尾碼名,但加上尾碼名會便於別人識別這是一個資料庫的文件,尾碼名不限,可以為 .DB、.SQLite、SQLite3等。
4 生成資料庫
點擊
工具
-NuGet 包管理器
--程式包管理器控制台
輸入
Add-Migration InitialCreate
等待結束後在輸入
Update-Database
如圖
然後你會發現解決方案管理器,多了 Migrations 目錄和一些文件,F:\ 目錄也多了一個MY.DB文件
5 使用工具管理SQLite文件
生成資料庫文件後,會發現無法直接打開的,即使是 VS2017 也不行。
這時可以使用工具 SQLite Expert Professional ,來對 SQLIte 資料庫進行管理。
下載地址 http://xzc.197746.com/SQLiteExpert5.zip
軟體介紹 https://www.cr173.com/soft/36343.html
安裝好軟體後,即可打開資料庫文件。
軟體打開資料庫文件教程:
6 生成增刪查改基架
這時候可以在程式對資料庫進行操作,對於如何使用,最好去看微軟的Entity Framework文檔。
筆者這裡給出一個簡單的示例。
步驟 1
在 Controller 目錄,右鍵點擊 添加 -- 新建基架的項目
步驟 2
點擊 視圖使用 Entity Framework 的 MVC 控制器
模型類 選擇 Users([項目名稱].Models)
資料庫上下文選擇 MyContext ([項目名稱].Models)
點擊 添加
步驟3
這時可以看到
Controller 多了 UsersController.cs 文件
Views 多了 Users 目錄
請點擊 運行 或按 F5,啟動網站
在網站後面加上 Users
例如 https://localhost:[實際埠]/Users,就可以對Users表為所欲為了
步驟4 添加數據
點擊 Create new
結果
7 填寫數據不能為空
註:這裡涉及到特性、數據驗證,筆者不再贅述,讀者可以先瞭解,然後翻譯別的文章。
經過上面操作,我們已經可以對資料庫進行操作,實際上,雖然可以操作數據,可是如果我想設置某個項必須填寫呢,某個項的格式必須是手機呢?總不能讓用戶隨便填吧?
打開 Users.cs
添加引用
using System.ComponentModel.DataAnnotations;
修改Users類的代碼如下
public class Users { public int ID { get; set; } //主鍵 [Required] public string Name { get; set; } /n/用戶名稱 [Required(ErrorMessage ="不能為空")] public int Age { get; set; } //用戶年齡 [Required] [RegularExpression(@"^1[3458][0-9]{9}$", ErrorMessage = "手機號格式不正確")] public int Number { get; set; } //用戶手機號碼 }
運行網站,打開 URL/Users,點擊 Create New,然後不用填寫內容直接提交,會發現
填寫其它項,然後在 Number一項亂填數字,會發現
這個就是模型驗證。
它不需要寫什麼代碼,只要在屬性上面加上 [特性]即可。
這方面知識,請另外查閱。
註:
- [Required] 表示該項不能為空
- [Required(ErrorMessage ="不能為空")] ErrorMessage ="" 就是不按此要求填寫,會出現額提示
- [RegularExpression(@"^1[3458][0-9]{9}$", ErrorMessage = "手機號格式不正確")] 這是正則表達式驗證,填寫的內容不符合格式的話,會出現錯誤提示。
【完】