首页 > 编程语言 >022年9月12日 学习ASP.NET Core Blazor编程系列三——实体

022年9月12日 学习ASP.NET Core Blazor编程系列三——实体

时间:2022-09-18 21:33:31浏览次数:115  
标签:Core 12 set get 数据库 ASP using public

学习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中有任何依赖。它们定义存储在数据库中的数据的属性。

 一、添加一个实体类

  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

 

标签:Core,12,set,get,数据库,ASP,using,public
From: https://www.cnblogs.com/chillsrc/p/16705874.html

相关文章

  • 20201206韩进学习笔记3
    sh编程sh脚本包含sh语句的文本文件,命令解释程序sh要执行该语句。sh脚本与C程序sh:解释程序,逐行读取sh脚本文件并直接执行,若行是可执行命令且为内置命令,则可直接执行。......
  • leetcode 127 -- 哈希表
    题目描述217手写哈希表classSolution{public:#defineDEFAULT_LEN16#defineDEFAULT_FACTOR0.75fconstfloatfactor=DEFAULT_FACTOR;typed......
  • 《Unix/Linux系统编程》第十章学习笔记 20201209戴骏
    第十章sh编程一、知识点归纳(一)sh脚本sh脚本(Bourne1982;Forouzan和Gilberg2003)是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。例如,我们可以创建一个文......
  • raspberry pi mount a usb drive tutorial
    #fdiskisatooltomanagedisksonLinux#thiswilldisplayalldisks#Attheendofthedisplayinglines,youwillseeyourusbdrive,checkthefilesyste......
  • 20201220蔡笃俊《信息安全系统设计与实现》第十章学习笔记
    一、任务内容自学教材第10章,提交学习笔记(10分)大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈......
  • NOIP 2012 Vigenère 密码
    //(waterproblem)#include<bits/stdc++.h>//#pragmaGCCoptimize(3)usingnamespacestd;intmain(){ strings1,s2; getline(cin,s1);getline(cin,s2); intl1......
  • 123
    %%清空环境变量clearclcwarningoff%%导入数据bianliang1=xlsread('实际名称.xlsx');%%参数设置leibieshumu=2;Tag=0;......
  • 为 .NET Core Web 应用程序使用 Jenkins 和 GitHub 的 CI/CD 管道
    为.NETCoreWeb应用程序使用Jenkins和GitHub的CI/CD管道我们将讨论Jenkins并逐步构建、测试和部署.NETCore应用程序议程詹金斯简介詹金斯的特点詹金......
  • EntityFrameworkCore 模型自动更新(上)
    话题嗯,距离上一次写博文已经过去近整整十个月,还是有一些思考,但还是变得懒惰了,心思也不再那么专注,有点耗费时间,学习也有点停滞不前,那就顺其自然,随心所欲吧,等哪天心血来潮,想......
  • 123456
    django-debug-toolbar使用详解简介django-debug-toolbar是django开发中必备神器,可以帮助快速了解项目的整体信息以及每个页面包括sql信息,http相关信息,方便去优化。官方......