学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)

 
 

从本篇文章开始我们从头开始学习如何创建一个图书租赁系统。

在本篇文章中我们先来学习创建一个书籍信息的实体类,并且通过实体框架(EF Core)使用这个书籍实体类来处理书籍信息数据。

EF Core是一个轻量化、可扩展、开源和跨平台的对象关系映射(ORM)框架,它简化了编写数据库访问的代码。EF Core支持多个数据库引擎。

EF Core使用模型执行数据访问。模型是由实体类和表示数据库会话的上下文对象构成。上下文对象允许查询并保存数据。

创建的实体类被称为POCO类(“普通的CLR对象”)因为他们没有在EF Core中有任何依赖。它们定义存储在数据库中的数据的属性。

一、添加一个实体类

  1. 在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 数据库提供程序广泛使用扩展方法。下表包含常见数据库提供程序的示例:

 

配置示例

NuGet 程序包

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编程系列三——实体的更多相关文章

  1. 学习ASP.NET Core Blazor编程系列六——初始化数据

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  2. 学习ASP.NET Core Blazor编程系列四——迁移

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  3. 学习ASP.NET Core Blazor编程系列五——列表页面

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  4. 学习ASP.NET Core Blazor编程系列六——新增图书(上)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  5. 学习ASP.NET Core Blazor编程系列八——数据校验

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  6. 学习ASP.NET Core Blazor编程系列九——服务器端校验

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  7. 学习ASP.NET Core Blazor编程系列十——路由(上)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  8. 学习ASP.NET Core Blazor编程系列十——路由(中)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  9. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

随机推荐

  1. C# --- SqlserverHelper帮助类、快速实现增删改查

    using System;using System.Data; using System.Data.SqlClient; namespace Demo.WorkerService { public c ...

  2. NC50965 Largest Rectangle in a Histogram

    NC50965 Largest Rectangle in a Histogram 题目 题目描述 A histogram is a polygon composed of a sequence of ...

  3. AI 企业多云存储架构实践 | 深势科技分享

    2020 年末,谷歌旗下 DeepMind 研发的 AI 程序 AlphaFold2 在国际蛋白质结构预测竞赛上取得惊人的准确度,使得" AI 预测蛋白质结构"这一领域受到了空前的 ...

  4. 《深入理解java虚拟机》读书笔记-第二章Java内存区域和内存溢出异常

    java1.7和java8的jvm存在差异,本文先按照<深入理解java虚拟机>的讲解内容总结,并将java8的改变作为附录放在文末 一丶运行时数据区域 ​ 图:java虚拟机运行时数据区 ...

  5. 【.NET基础】Linq常用语法代码演示

    前言:前言不重要,linq入门常用的语法,linq语法可以用来写操作集合.数据库表集合等等几乎所有集合类型的操作.下面就写几个案例(以List集合来做的),看代码和运行结果即可. 本文演示环境:VS2 ...

  6. ansible概述、安装、模块介绍

    一.Ansible介绍 Ansible是一 个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩. 它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功 ...

  7. EF Core 数据过滤

    1 前言 本文致力于将一种动态数据过滤的方案描述出来(基于 EF Core 官方的数据筛选器),实现自动注册,多个条件过滤,单条件禁用(实际上是参考ABP的源码),并尽量让代码保持 EF Core 的 ...

  8. P2512 【一本通提高篇贪心】「一本通 1.1 练习 6」[HAOI2008]糖果传递

    [HAOI2008]糖果传递 题目描述 有 n n n 个小朋友坐成一圈,每人有 a i a_i ai​ 个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为 1 1 1. 输入格式 小朋友 ...

  9. 体验Lambda的更优写法和Lambda标准格式

    体验Lambda的更优写法 借助Java8的全新语法,上述Runnable接口的匿名内部类写法可以通过更简单的Lambda表达式达到等效: public class Lambda02 { public ...

  10. git 生成key并添加key(Windows)

    简介 一般来说,在项目代码拉取或者提交前都需要添加项目权限,除此之外也需要将对应设备的public key添加至对应的git上,因此需要生成public key 步骤 1.安装git插件(Window ...