• 学习ASP.NET Core 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

     

  • 相关阅读:
    优化cocos2d/x程序的内存使用和程序大小
    cocos2d-x移植:xcode到eclipse
    程序员在编程工作中痛苦的压抑着自己某些强烈的情绪
    C++语言的一些问题
    基数排序-图非常清晰明了
    【Cocos2d-X(1.x 2.x) 修复篇】iOS6 中 libcurl.a 无法通过armv7s编译以及iOS6中无法正常游戏横屏的解决方法
    《C++ Primer》笔记-inline内联函数
    走出你的舒适区
    UDP广播与多播
    测试问题反馈需要包含内容总结
  • 原文地址:https://www.cnblogs.com/chillsrc/p/16705874.html
Copyright © 2020-2023  润新知