Blazor小白筆記03-連接數據庫

2024年2月6日 22点热度 0人点赞

前面我們使用了BootstrapBlazor項目模版來學習一些示例,示例可以慢慢學,先學習一下怎麼連接到數據庫,asp.net Core和asp.net連接數據庫完全不一樣,以前寫asp.net時直接用SQL查詢數據庫來顯示數據,而Core則需要使用
Microsoft.EntityFrameworkCore來連接數據庫,也是第一次使用這個。

全程參考了博客園這位大神的教程:
https://www.cnblogs.com/chillsrc/p/16747434.html

1、新建實體類

在項目中新建一個models文件夾,然後新建類,用於和數據庫中的表來進行對應,網上的都是新建一個book類,這裡也一樣。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace BootstrapBlazor.OnlyServer1.Models
{
	/// <summary>
	/// 測試用例
	/// </summary>
	public class Book
	{
		[Key] public int Id { get; set; }
		public string? 節點名稱 { get; set; }
		public int 父節點ID { get; set; }
	}
	/// <summary>
	/// 畫圖規范
	/// </summary>
	public class HTGF 
	{
		[Key] public int Id { get; set; }
		public string? 結構名稱 { get; set; }
		public string? 類型 { get; set; }
	}
}

再新建一個BookContext.cs類,這裡需要註意的是DbSet名稱是和數據庫中的表是一一對應的關系,剛開始沒搞明白這一點。

using Microsoft.EntityFrameworkCore;
namespace BootstrapBlazor.OnlyServer1.Models
{
	public class BookContext:DbContext
	{
		public BookContext(DbContextOptions<BookContext> options)
			   : base(options)
		{
		}
		public DbSet<Book> 樹節點 { get; set; }
		public DbSet<HTGF> 畫圖規范 { get; set; }
	}
}

public DbSet<Book> 樹節點 { get; set; }為例,Book是你新建的實體類名稱,它和數據庫中的表結構是對應的關系,而樹節點是數據庫中的表名稱,用的是中文表名稱,所以顯得很奇怪。

2、添加數據庫連接字符串

打開appsettings.json文件,增加數據庫的連接字符串

 "ConnectionStrings": {
   "BookContext": "Server=服務器名稱;Database=數據庫名稱;User Id=用戶名;Password=密碼;TrustServerCertificate=True"
 },

這裡需要特別註意的是一定要有TrustServerCertificate=True,不然會連接數據庫失敗,但是沒有任何提示,後來在使用pm執行Update-Database時才發現出錯的,其實能不能查詢數據和有沒有執行初始遷移並沒有關系,但是它可以檢查數據庫連接是否正常。

由於沒有執行數據初始化操作,需要人工在數據庫中增加上那兩個表,表結構要和定義的實體類中的一致,或者實體類中的可以比數據庫中表的少一些。

打開program.cs文件,在var app = builder.Build();前增加一句

builder.Services.AddDbContextFactory<BookContext>(opt =>
opt.UseSqlServer(ConfigHelper.Configuration["ConnectionStrings:BookContext"]));
var app = builder.Build();

3、在頁面上顯示數據

還是打開前面新建的demo1.razor組件,在最前面增加引用

@using BootstrapBlazor.OnlyServer1.Models
@using Microsoft.EntityFrameworkCore
@inject IDbContextFactory<BookContext> dbFactory

在html部分增加一個table標簽

<table class="table-responsive" width="90%">
	<tr>
		<td>ID</td>
		<td>節點名稱</td>
		<td>父節點ID</td>
	</tr>
	@foreach (var item in D2)
	{
		<tr>
			<td>@item.Id</td>
			<td>@item.結構名稱</td>
			<td>@item.類型</td>
		</tr>
	}
</table>

在代碼部分增加顯示數據的代碼

@code {
	private static BookContext? _context;
	private	List<string> L1 = new List<string>();
	private List<string> L2 = new List<string>();
	private List<Book> D1 = new List<Book>();
	private List<HTGF> D2 = new List<HTGF>();
	protected override async Task OnInitializedAsync()
	{
		L1=["999","777","888" ];
		L2 = ["山西", "湖北", "888"];
		_context = dbFactory.CreateDbContext();
		D1 = _context.樹節點.ToList();
		D2 = _context.畫圖規范.ToList();
		await base.OnInitializedAsync();
	}
}

然後運行就可以查看顯示的結果了,如果沒有顯示出來數據的話,就得檢查是哪的問題了。

顯示的效果,這裡沒有使用第三方的UI

#職場##冬日生活打卡季##挑戰30天在頭條寫日記#