我们现在有了基本的日志,但是每次输入完重整页面都会刷新,因为这些资料都只存在於浏览器,没有真正储存到资料库,为了保存下来,我们要跟资料库连接。
(注:Blazor WebAssembly 没有直接跟资料库沟通的能力,不过微软有提供 ASP.NET Core hosted 选项,可以在建立 Blazor WebAssembly 时一并建立 ASP.NET Core Web API 专案)
首先在appsettings.json
加入连线字串,因为测试用,所以 SqlServer 用 Windows 验证。
接着去 NuGet 套件管理员下载两个套件,分别为 Microsoft.EntityFrameworkCore.SqlServer 跟 Microsoft.EntityFrameworkCore.Tools,因为 6.0 还是预览版,所以这边用最新的稳定版 5.0.9。这两个套件是跟 SqlServer 沟通用的 ORM 套件,ORM 又是什麽呢?
远古时代的程序开发者想从 SqlServer 取资料回来,都必须学习 SQL 语法,後来 .NET 平台(包括 VB、C#)开发了 ADO.NET 这个取资料的好工具,将资料取回来後一一跟程序 mapping,但 ADO.NET 在资料映射上不如人意,微软便推出了 Entity Framework,这就是初始的 ORM(Object-Relational Mapper),让开发者可以把资料变成物件 (entity),不用实际去接触 SQL 语法,且有了设计工具 (Designer) 让程序开发者更好操作。
但也有些人觉得 Entity Framework 太笨重就转向另一个轻便的工具Dapper的怀抱,笔者也用过 Dapper,如果是喜欢自己组 SQL 语法的人确实会觉得方便。
而 .NET Core 这个跨平台版本的 ORM 就是用 Entity Framework Core 去做资料映射的处理。
安装完套件後,新增一个 class AppDbContext
,继承DbContext
,里面的建构子单纯将DbContextOptions<AppDbContext> options
传给基底 class 也就是DbContext
。
接着去Startup.cs
,在ConfigureServices
注册使用资料库,这边用的是UseSqlServer()
,当然也有UseMysql()
、UseOracle()
可以用,只要安装相应的套件即可。
打开套件管理器主控台,输入指令Add-Migration Init
,告诉 Entity Framework Core 要建立一个移转档案,接着就会产生转移档 Migration,这是 Entity Framework Core 的特点,在程序跟资料库之间产生中介 Migration,另外 Migration 一大好处就是在真正确定前,都可以不断修改,等确定後再更新资料库。
接下来要在 Post 里面加上 BlogId,Blog 对於 Post 而言是主表之於子表,如果新增 Migration 的时候没有加入对主表的参考(也就是主表 Foreign Key 子表),EF Core 很聪明会主动加上,但栏位名字就会是 Model+Key 的名称,变成BlogModelBlogId
,我们来把名称简化。
先在PostModel
加上两个 Property,BlogId
跟Blog
,切记一定要这样加入,BlogId
是存在资料库用的,Blog
则是在串联资料的时候有个实体可以用,让我们不用自己 join 资料表,後续会再说明。
接着用Remove-Migration
将原先的 Migration 清除,再新增一次 Migration,可以看到新的 Migration 有简化的名称BlogId
了,这时候再去更新资料库。
下指令Update-Database
去更新资料库,然後去服务器总管连接(找的方法跟找套件管理员一样),可以找到刚才建立的资料库Blog
,资料库名字来自连线字串Database
的名称,可以看到资料库已经建起来了,过程中没有用到 SQL 语法或是 SSMS 介面。
不过有一点要特别注意,中途如果换资料库的话,原先的 Migration 有很大机率产生问题,各家资料库的资料型别都有差异,所以最好一开始就规划好用哪个资料库。
除了AddDbContext<T>
这种最常见的做法,还有AddDbContextFactory<T>
这种在个别 Component 产生新的DbContext
的方法,因为AddDbContext<T>
的生命周期是scoped
,对 Blazor Server 来说也就是除非关闭系统,否则DbContext
都不会 dispose,有些人希望生命周期仅限於 Component 即可,就可以用AddDbContextFactory<T>
。
Ref: Entity Framework
Ref: Dapper
Ref: Database Providers
教电脑判断是圈圈还是叉叉 我们先来看看我们的资料集(下图),看黄色的部分就好,因为像素低的关系,所以...
Samantha和Theodore在一起的时候,时常提及自己在写钢琴曲,灵感来自於和Theodore...
昨天介绍了什麽是IDE,今天就要介绍我常用的IDE了 IDE大比较 1. Visual Studio...
You Need the “Exams4Success” Pegasystems PEGAPCSA8...
前言 在上一篇文章中,我介绍了在 Obsidian 中实作 学习笔记整理流程 的方法。我将资讯来源分...