前面我們使用了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();
}
}
然後運行就可以查看顯示的結果了,如果沒有顯示出來數據的話,就得檢查是哪的問題了。
![](https://news.xinpengboligang.com/upload/keji/e3150d01d3b185c02d3f8a1933b57d02.jpeg)
顯示的效果,這裡沒有使用第三方的UI