022年9月12日 学习ASP.NET Core Blazor编程系列三——实体
从本篇文章开始我们从头开始学习如何创建一个图书租赁系统。
在本篇文章中我们先来学习创建一个书籍信息的实体类,并且通过实体框架(EF Core)使用这个书籍实体类来处理书籍信息数据。
EF Core是一个轻量化、可扩展、开源和跨平台的对象关系映射(ORM)框架,它简化了编写数据库访问的代码。EF Core支持多个数据库引擎。
EF Core使用模型执行数据访问。模型是由实体类和表示数据库会话的上下文对象构成。上下文对象允许查询并保存数据。
创建的实体类被称为POCO类(“普通的CLR对象”)因为他们没有在EF Core中有任何依赖。它们定义存储在数据库中的数据的属性。
一、添加一个实体类
- 在Visual Studio 2022的解决方案资源管理器中,右键单击该RlazorAppDemo,在弹出菜单中选择,项目-->添加-->新建文件夹,修改文件夹名称为“Models”。如下图。
2. 在Visual Studio 2022的解决方案资源管理器中,鼠标右键单击“Models”文件夹。在弹出菜单中选择,添加-->类。类名为Book。如下图。
3.在book类中的代码文件中添加以下属性 。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks; namespace BlazorAppDemo.Models
{
public class Book
{
private string name = String.Empty;
private string author=String.Empty; [Key]
public int ID { get; set; }
public string Name { get => name; set => name = value; }
public DateTime ReleaseDate { get; set; }
public string Author { get => author; set => author = value; }
public decimal Price { get; set; }
/// <summary>
/// 图书类型编号
/// </summary>
public string Type { get; set; }
/// <summary>
/// 页码
/// </summary>
public int TotalPages { get; set; }
/// <summary>
/// 库存数量
/// </summary>
public int StockQty { get; set; }
/// <summary>
/// 现存量
/// </summary>
public int Qty { get; set; } }
}
其中ID字段必须是数据库中表Book的主键。
二、添加数据库上下文类
在Visual Studio 2022的解决方案资源管理器中,鼠标右键单击“Models”文件夹。在弹出菜单中选择,添加-->类。类名为BookContext.cs类,继承自DbContext,操作方式如上第2点中的图所示,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; namespace BlazorAppDemo.Models
{ public class BookContext:DbContext {
public BookContext(DbContextOptions<BookContext> options) : base(options) { } public DbSet<Book> Book { get; set; } }
}
之前的代码中我们创建了一个DbSet<Book>类型的属性Book.在实体框架中,实体集合通过对应数据库中的表,实体对应表中的行。
三、添加数据库连接字符串
在Visual Studio 2022中的资源管理器中找到appsettings.json文件,用鼠标双击打开,在文件中添加一个连接字符串,代码如下。
{ "Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
} }, "ConnectionStrings": {
"BookContext": "Server=.;Database=Books;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"AllowedHosts": "*" }
四、注册数据库上下文
1.代码写到这时,我们发现刚才写的代码,特别是BookContext.cs中的代码,如下图红框处,出现了波浪线。这表明我们的依赖项中没有EntityFrameCore相关的组件。
2.在Visual Studio 2022的资源管理器中,在“依赖项”上点击鼠标右键,在弹出菜单中选择“管理Nuget程序包”。如下图。
3.在浏览界面的搜索框中输入以下四个包的名称。如下图。找到之后分别安装好。
4. 在Visual Studio 2022中的资源管理器中,鼠标右键单击“Data文件夹。在弹出菜单中选择,添加-->类。类名为ConfigHelper。这个类用来读取appsettings.json文件中的配置信息。代码如下。
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json; namespace BlazorAppDemo.Data
{ public class ConfigHelper { public static IConfiguration Configuration { get; set; } static ConfigHelper ()
{ //ReloadOnChange = true 当appsettings.json被修改时重新加载 Configuration = new ConfigurationBuilder()
.Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
.Build();
}
}
}
5. 在Visual Studio 2022中的资源管理器中找到Program.cs文件,用鼠标双击打开,在Program.cs文件的var app = builder.Build();这一行代码前面写入依赖注入容器注册数据库上下文的代码,具体代码如下。
builder.Services.AddDbContextFactory<BookContext>(opt =>
opt.UseSqlServer(JsonHelper.Configuration["ConnectionStrings:BookContext"]));
6. 最后,在Visual Studio 2017中的菜单中选择“生成-->生成解决方案”对项目进行编译,以验证自己写的代码没有任何错误同。
五、EFCore支持的数据库
每个DbContext
实例都必须配置为使用一个且仅一个数据库提供程序。(DbContext
子类型的不同实例可用于不同的数据库提供程序,但单个实例只能使用一个。)使用特定的 Use*
" 调用配置数据库提供程序。例如,上面代码中我们使用SQL Server数据库提供程序。
builder.Services.AddDbContextFactory<BookContext>(opt =>
opt.UseSqlServer(JsonHelper.Configuration["ConnectionStrings:BookContext"]));
这些 Use*
" 方法是由数据库提供程序实现的扩展方法。 这意味着必须先安装数据库提供程序 NuGet 包,然后才能使用扩展方法。
EF Core 数据库提供程序广泛使用扩展方法。下表包含常见数据库提供程序的示例:
|
|
|
|||
SQL Server 或 Azure SQL |
.UseSqlServer(connectionString) |
Microsoft.EntityFrameworkCore.SqlServer |
|||
Azure Cosmos DB |
.UseCosmos(connectionString, databaseName) |
Microsoft.EntityFrameworkCore.Cosmos |
|||
SQLite |
.UseSqlite(connectionString) |
Microsoft.EntityFrameworkCore.Sqlite |
|||
EF Core 内存中数据库 |
.UseInMemoryDatabase(databaseName) |
Microsoft.EntityFrameworkCore.InMemory |
|||
PostgreSQL* |
.UseNpgsql(connectionString) |
Npgsql.EntityFrameworkCore.PostgreSQL |
|||
MySQL/MariaDB* |
.UseMySql((connectionString) |
Pomelo.EntityFrameworkCore.MySql |
|||
Oracle* |
.UseOracle(connectionString) |
Oracle.EntityFrameworkCore |
022年9月12日 学习ASP.NET Core Blazor编程系列三——实体的更多相关文章
- 学习ASP.NET Core Blazor编程系列六——初始化数据
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列四——迁移
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列五——列表页面
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列六——新增图书(上)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列八——数据校验
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列九——服务器端校验
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列十——路由(上)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列十——路由(中)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
随机推荐
- Ansible Playbook概览
Ansible playbook 执行需要三步路执行: 1.编写playbook 2.定义主机清单文件 3.设置运行环境,写入配置文件 1.编写playbook Playbook使用YAML语法格式进 ...
- 【cartogarpher_ros】二: 官方Demo的介绍与演示
上一节我们介绍了在linux中快速安装集成ros环境的cartographer. 本节我们会来跑一些官方demo,用于测试cartographer是否正确安装,顺便看看cartographer的建图与 ...
- Mark IntelliJ IDEA 2018.2.3破解
来源:https://blog.csdn.net/qq_38060935/article/details/90377761
- CSS 浮动 (二)
CSS 浮动 本人是一名大二学生,欢迎大家进行交流 V15774135883 推荐一个是自学的网站 里面有超多培训机构的大课,地址 有需要可以加我免费拿! 传统网页布局的三种方式 网页布局的本质--用 ...
- 5-8 Resource 静态资源服务器
静态资源服务器 什么是静态资源服务器 我们无论做什么项目,都会有一些页面中需要显示的静态资源,例如图片,视频文档等 我们一般会创建一个单独的项目,这个项目中保存静态资源 其他项目可以通过我们保存资源的 ...
- shell脚本函数及数组
函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...
- 聊聊 C++ 中的几种智能指针 (上)
一:背景 我们知道 C++ 是手工管理内存的分配和释放,对应的操作符就是 new/delete 和 new[] / delete[], 这给了程序员极大的自由度也给了我们极高的门槛,弄不好就得内存泄露 ...
- Note -「Dsu On Tree」学习笔记
前置芝士 树连剖分及其思想,以及优化时间复杂度的原理. 讲个笑话这个东西其实和 Dsu(并查集)没什么关系. 算法本身 Dsu On Tree,一下简称 DOT,常用于解决子树间的信息合并问题. 其实 ...
- Seata-初体验以及避坑
Seata是什么 这里引用官方解释 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用 ...
- Linux学习系列--用户(组)新增、查看和删除
在实际的工作中,在接触Linux的用户组管理的时候,一般来说都是在系统开建设的时候设置好,root权限由特定的负责人保管用户密码,避免误操作带来不必要的麻烦. 在具体使用的时候,会利用相关的命令设置一 ...