学习ASP.NET Core Blazor编程系列三——实体

打印 上一主题 下一主题

主题 883|帖子 883|积分 2649

学习ASP.NET Core Blazor编程系列一——综述学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(中)学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下) 
学习ASP.NET Core Blazor编程系列二——第一个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类中的代码文件中添加以下属性 。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel.DataAnnotations;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. namespace BlazorAppDemo.Models
  7. {
  8.     public class Book
  9.     {
  10.         private string name = String.Empty;
  11.         private string author=String.Empty;
  12.         [Key]
  13.         public int ID { get; set; }
  14.         public string Name { get => name; set => name = value; }
  15.         public DateTime ReleaseDate { get; set; }
  16.         public string Author { get => author; set => author = value; }
  17.         public decimal Price { get; set; }
  18.         /// <summary>
  19.         /// 图书类型编号
  20.         /// </summary>
  21.         public string Type { get; set; }
  22.         /// <summary>
  23.         /// 页码
  24.         /// </summary>
  25.         public int TotalPages { get; set; }
  26.         /// <summary>
  27.         /// 库存数量
  28.         /// </summary>
  29.         public int StockQty { get; set; }
  30.         /// <summary>
  31.         /// 现存量
  32.         /// </summary>
  33.         public int Qty { get; set; }
  34.         
  35.     }
复制代码
   其中ID字段必须是数据库中表Book的主键。

 二、添加数据库上下文类

        在Visual Studio 2022的解决方案资源管理器中,鼠标右键单击“Models”文件夹。在弹出菜单中选择,添加-->类。类名为BookContext.cs类,继承自DbContext,操作方式如上第2点中的图所示,代码如下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.EntityFrameworkCore;
  6. namespace BlazorAppDemo.Models
  7. {
  8.     public class BookContext:DbContext
  9.     {
  10.         public BookContext(DbContextOptions<BookContext> options)
  11.                : base(options)
  12.         {           
  13.         }
  14.         public DbSet<Book> Book { get; set; }
  15.     }
  16. }
复制代码
  之前的代码中我们创建了一个DbSet类型的属性Book.在实体框架中,实体集合通过对应数据库中的表,实体对应表中的行。
  三、添加数据库连接字符串

   在Visual Studio 2022中的资源管理器中找到appsettings.json文件,用鼠标双击打开,在文件中添加一个连接字符串,代码如下。

  1. {
  2.   "Logging": {
  3.     "LogLevel": {
  4.       "Default": "Information",
  5.       "Microsoft.AspNetCore": "Warning"
  6.     }
  7.   },
  8.   "ConnectionStrings": {
  9.     "BookContext": "Server=.;Database=Books;Trusted_Connection=True;MultipleActiveResultSets=true"
  10.   },
  11.     "AllowedHosts": "*"
  12.   }  <br>
复制代码
四、注册数据库上下文

1.代码写到这时,我们发现刚才写的代码,特别是BookContext.cs中的代码,如下图红框处,出现了波浪线。这表明我们的依赖项中没有EntityFrameCore相关的组件。

 

 

2.在Visual Studio 2022的资源管理器中,在“依赖项”上点击鼠标右键,在弹出菜单中选择“管理Nuget程序包”。如下图。

 


3.在浏览界面的搜索框中输入以下四个包的名称。如下图。找到之后分别安装好。


4. 在Visual Studio 2022中的资源管理器中,鼠标右键单击“Data文件夹。在弹出菜单中选择,添加-->类。类名为ConfigHelper。这个类用来读取appsettings.json文件中的配置信息。代码如下。

 
  1. using Microsoft.Extensions.Configuration;
  2. using Microsoft.Extensions.Configuration.Json;
  3. namespace BlazorAppDemo.Data
  4. {
  5.     public class ConfigHelper
  6.     {
  7.    
  8.         public static IConfiguration Configuration { get; set; }
  9.         static ConfigHelper ()
  10.         {
  11.             //ReloadOnChange = true 当appsettings.json被修改时重新加载         
  12.             Configuration = new ConfigurationBuilder()
  13.             .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
  14.             .Build();
  15.         }
  16. }
  17. }
复制代码
 

5. 在Visual Studio 2022中的资源管理器中找到Program.cs文件,用鼠标双击打开,在Program.cs文件的var app = builder.Build();这一行代码前面写入依赖注入容器注册数据库上下文的代码,具体代码如下。
  1. builder.Services.AddDbContextFactory<BookContext>(opt =>
  2. opt.UseSqlServer(JsonHelper.Configuration["ConnectionStrings:BookContext"]));
复制代码
 6. 最后,在Visual Studio 2017中的菜单中选择“生成-->生成解决方案”对项目进行编译,以验证自己写的代码没有任何错误同。

 五、EFCore支持的数据库
      每个DbContext实例都必须配置为使用一个且仅一个数据库提供程序。(DbContext子类型的不同实例可用于不同的数据库提供程序,但单个实例只能使用一个。)使用特定的 Use*" 调用配置数据库提供程序。例如,上面代码中我们使用SQL Server数据库提供程序。
  1. builder.Services.AddDbContextFactory<BookContext>(opt =>
  2. 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
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表