.NET6專案連線資料庫方式方法

2023-05-16 15:00:32

前言

接上一篇Linux系統下建立dotnet專案,這一篇我們聊聊.NET6環境下dotnet專案連線資料庫的方式方法,包括資料庫字串該如何設定。看了很多博主寫的文章,連線資料庫字串設定的方式和位置五花八門,這篇文章給大家介紹一下連線資料庫字串的設定方式方法,順便介紹下一個新建立的dotnet專案的各個模組的作用。

各模組作用


① Properties -- launchSettings.json

launchSettings.json檔案是 ASP.NET Core 應用特有的設定標準,用於應用的啟動準備工作,包括環境變數,開發埠等。在launchSettings.json檔案中進行設定和右鍵專案--【屬性】--【偵錯】中所提交的更改的效果是一樣的,並且支援同步更新。
②依賴項

依賴項組織了專案開發與執行時所需的DLL,分佈在不同的類別下:包、分析器、框架、專案。
③ Controllers

Controllers 目錄用於存放MVC程式設計框架下的控制器類檔案。
④ appsettings.json

appsettings.json 是 ASP.NET Core 預設提供的系統組態檔。與 ASP.NET WeForm、ASP.NET MVC 中的 web.config 檔案功能類似。

ASP.NET Core 支援利用環境變數來動態設定 JSON 檔案。ASP.NET Core 參照了一個特定的環境變數 ASPNETCORE_ENVIRONMENT 來描述應用程式當前執行的環境。這個變數可以被設定為任何你喜歡的值,但是有三個值被約定使用: Development,Staging 和 Production。
⑤Program.cs

Program.cs 是 Asp.Net Core 的入口檔案。它負責建立、設定和執行泛型主機(Host),ASP.NET Core應用程式需要在泛型主機中執行。
補充說明:有的同學建立的專案裡面沒有Program.cs,但是有Startup檔案,也是一樣的,只是寫法略有不同。

新增依賴

新增依賴的命令是dotnet add package xxxx.xxx

//新增SqlServer依賴
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
//新增MySQL依賴
dotnet add package MySql.EntityFrameworkCor
//新增Sqlite依賴
dotnet add package Microsoft.Data.Sqlite.Core

連線資料庫字串到底該寫在哪裡

通過對各個模組作用的介紹,我們知道連線資料庫的字串肯定是寫在appsettings.json檔案裡面,有的人把連線資料庫字串寫在上下文類檔案中,或者寫在Program.cs檔案中,也不是不可以,不過不是規範的寫法。舉個例子,當你的專案發布部署以後,要求更改新的資料庫服務地址,怎麼辦?我們都知道.NET專案編譯以後,所有.cs檔案都會被編譯為DLL檔案,想修改裡面的內容就需要重新編譯,也就是說之前釋出好的專案是不能用了,但是.json檔案沒有編譯。如果你的連線資料庫字串寫在Program.cs檔案中,那麼只能重新編譯釋出。如果連線資料庫字串寫在了appsettings.json中,則只需要修改appsettings.json檔案即可。現在知道連線資料庫字串到底該寫在哪裡了吧。


以上都是不規範的寫法。

幾種資料庫的設定方法

下面逐一介紹MySQL、SQL server、sqlite資料的連線方式

MySQL

appsettings.json中新增下面內容,其中MySqlDataBase可以自己定義,見名識意就好哦。後面的內容根據自己的實際情況修改就好。

"ConnectionStrings": {
    "MySqlDataBase": "Server=127.0.0.1;Port=3306;User Id=xxx;Password=xxx;Database=xxx"
  }

Program.cs檔案中新增如下內容。其中"MySqlDataBase"為appsettings.json中定義的名字。MynetContext為你資料上下文類名。

builder.Services.AddDbContext<MynetContext>(
    options =>
    {
        options.UseMySql(builder.Configuration.GetConnectionString("MySqlDataBase"), new MySqlServerVersion(new Version(8, 0, 31)));
    });

SQL server

appsettings.json中新增下面內容,其中"MVCSqlContext"可以自己定義,見名識意就好哦。後面的內容根據自己的實際情況修改就好。

"ConnectionStrings": {
    "MVCSqlContext": "Server=localhost;Database=InfoUser;User ID=sa;Password=sa;"
  }

Program.cs檔案中新增如下內容。其中"MVCSqlContext"為appsettings.json中定義的名字。MynetContext為你資料上下文類名。

builder.Services.AddDbContext<MynetContext>(
    options =>
    {
        options.UseSqlServer(builder.Configuration.GetConnectionString("MVCSqlContext"));
    });

SQLite

appsettings.json中新增下面內容,其中"DefaultConnection"可以自己定義,見名識意就好哦。後面的內容根據自己的實際情況修改就好。

"ConnectionStrings": {
    "DefaultConnection": "DataSource=app.db;Cache=Shared"
  }

Program.cs檔案中新增如下內容。其中"DefaultConnection"為appsettings.json中定義的名字。MynetContext為你資料上下文類名。

builder.Services.AddDbContext<MynetContext>(
    options =>
    {
        options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection"));
    });

補充:為防止有人不知道在Startup檔案怎麼寫,這裡給一個範例:

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
 
            services.AddDbContext<PrizeContext>(options => options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));
        }

注:下一篇將建立實體類,通過EFCore方式自動生成資料庫。