ASP.NET Core 使用 SQLite 教程,EF SQLite教程,修改模型更新資料庫,適合初學者看懂詳細、簡單教程

来源:https://www.cnblogs.com/whuanle/archive/2018/12/19/10144101.html
-Advertisement-
Play Games

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 = "手機號格式不正確")] 這是正則表達式驗證,填寫的內容不符合格式的話,會出現錯誤提示。

   

 

【完】


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.文件讀模式 r f = open("helloworld", 'r', encoding="utf-8") 文件句柄: "helloworld" 表示讀的文件的文件名, 'r' 代表讀模式, encoding="utf-8" 表示字元編碼形式為utf-8。 有open就有close,不管是讀文件 ...
  • Python基礎知識(37):訪問資料庫(Ⅱ) 因臨近考試,本人即將進入複習階段,從明天12月19號至2019年的1月二十多號暫停更新 二、MySQL MySQL是Web世界中使用最廣泛的資料庫伺服器。SQLite的特點是輕量級、可嵌入,但不能承受高併發訪問,適合桌面和移動應用。而MySQL是為服務 ...
  • 在我們的世界中事物和事物之間總會有一些聯繫. 在面向對象中. 類和類之間也可以產生相關的關係 1. 依賴關係 執行某個動作的時候. 需要xxx來幫助你完成這個操作. 此時的關係是最輕的. 隨時可以更換另外一個東西來完成此操作 2. 關聯關係 在對象裡面埋對象 1. 一對一關係 2. 一對多關係 類中 ...
  • 本文說明瞭如何定製化JHipster-Registry,增加消息匯流排功能。 ...
  • 前言: 最近有人在Twisted郵件列表中提出諸如”為任務緊急的人提供一份Twisted介紹”的的需求。值得提前透露的是,這個序列並不會如他們所願.尤其是介紹Twisted框架和基於Python 的非同步編程而言,可能短時間無法講清楚。因此,如果你時間緊急,這恐怕不是你想找的資料。 我相信如果對非同步編 ...
  • 一、前言 瞭解過flask的python開發者想必都知道flask中核心機制莫過於上下文管理,當然學習flask如果不瞭解其中的處理流程,可能在很多問題上不能得到解決,當然我在寫本篇文章之前也看到了很多博文有關於對flask上下文管理的剖析都非常到位,當然為了學習flask我也把對flask上下文理 ...
  • 幾乎在所有的應用程式中,緩存都是一個永恆的話題,恰當的使用緩存可以有效提高應用程式的性能;在某些業務場景下,使用緩存依賴會有很好的體驗;在 Asp.Net Core 中,支持了多種緩存組件,下麵要介紹的內容就是基於 IMemoryCache 的緩存依賴。 ...
  • 本篇我將帶著大家一起來對Dapper進行下封裝並實現基本的增刪改查、分頁操作的同步非同步方法的實現(已實現MSSQL,MySql,PgSQL)。同時我們再實現一下倉儲層的代碼生成器,這樣的話,我們只需要結合業務來實現具體的業務部分的代碼就可以了,可以大大減少我們重覆而又繁瑣的增刪改查操作,多留點時間給 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...