• 第61章 Jquery JSON Table EntityFrameworkCore自动生成数据库


    通过EntityFrameworkCore依赖注入中间件的通过CURD操作,实现程序数据(内存)与数据库表(持久化数据)进行数据的交互操作,一般情况下需要先通过CodeFrist模型,在程序第1次执行时会自动把实体及其属性所定义的约束规则并结合数据库连接字符串,映射到指定数据库软件(这里特指:SQL Server)数据库的指定表及其字段上。

        EntityFrameworkCore支持在多种数据库软件(提供程序)中,通过CodeFrist模型自动指定的数据库、数据库表、字段及其相应的映射规则,当前示例程序则只支持在SQL Server数据库软件中,自动生成SQL Server数据库所以首先需要通过Nuget引用包: Microsoft.EntityFrameworkCore.SqlServer依赖注入中间件来实现上述功能。

    EntityFrameworkCore通过CodeFrist模型自动指定的数据库、数据库表、字段及其相应的映射规则有2种:

    1、使用Database.EnsureCreated()方法,在指定的数据库软件(这里特指:SQL Server)中自动新建指定的数据库表、字段及其相应的映射规则。

    2、通过执行迁移和更新命令行,在指定的数据库软件(这里特指:SQL Server)中自动新建指定的数据库表、字段及其相应的映射规则,如果需要使用迁移和更新命令行,则必要先需要通过Nuget引用包: Microsoft.EntityFrameworkCore.Tools程序集来实现上述功能,否则会在命令行的执行过程中出现异常:Your startup project 'JsonTable' doesn't reference Microsoft.EntityFrameworkCore.Design. This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again.”。

    1 通过Database.EnsureCreated()方法自动生成数据库

    1.1 EntityFrameworkCore数据库数据CURD交换操作上下文类定义

        ///

        /// 【EFCore上下文】

        ///

        /// 摘要:

        ///     获取/设置学生实体的数据库设置实例,用于实现指定实体与数据库指定表的CURD操作。

        ///

        ///

        public class EFCoreContext : DbContext

        {

            #region 拷贝构造方法

            ///

            /// 【拷贝构造方法】

            ///

            /// 摘要:

            ///    基类构造通过该构造方法中的参数实例,连接到指定数据库(SQL Server)数据库软件中数据库。

            ///

            ///

           public EFCoreContext(DbContextOptions options) :base(options)

           {

                //如果(SQL Server)数据库软件中没有指定的数据库, 当通过Code First模式时,在第1次生成数据库时,则通过下1行语句结合数据库连接字符串,在(SQL Server)数据库软件中生成指定的数据库。

                Database.EnsureCreated();

            }

            #endregion

            #region 属性

            ///

            /// 【学生】

            ///

            /// 摘要:

            ///     获取/设置学生实体的数据库设置实例,用于实现当前程序【Json】.【领域】.【学生集】.【学生】实体与“[JsonTable].[Student]”表之间的CURD的交互操作,并把这些数据存储到数据库设置实例中(内存)。

            ///

            ///

            public DbSet Student { get; set; }

            #endregion

            #region 方法--私有/保护--覆写

            /// name="builder">模型生成器实例,用于把当前程序中实体和属性所定义的约束规则,映射到数据库指定表及其字段上。

            ///

            /// 【模型生成执行...】

            ///

            /// 摘要:

            ///     该方法把当前程序中实体和属性所定义的约束规则,映射到数据库指定表及其字段上。

            ///

            ///

            protected override void OnModelCreating(ModelBuilder builder)

            {

                builder.Entity().HasKey(student => student.Id);

                base.OnModelCreating(builder);

            }

            #endregion

    }

    1.2 把数据库数据交互依赖注入中间件注入到.Net(Core)6框架内置依赖注入容器中

        var builder = WebApplication.CreateBuilder(args);

    //通过UseSqlServer依赖注入中间,通过“Windows身份认证”对SQL Server数据库进行身份验证,并与SQL Server数据库进行连接。

    builder.Services.AddDbContext

       (options => options.UseSqlServer(builder.Configuration.GetConnectionString("SqlServerWindows")));

    //通过UseSqlServer依赖注入中间,通过“SQL Server身份认证”对SQL Server数据库进行身份验证,并与SQL Server数据库进行连接,连接字符串中必须配置所连接数据库的:用户名、密码。

    //builder.Services.AddDbContext

    //    (options => options.UseSqlServer(builder.Configuration.GetConnectionString("SqlServerSQL")));

    //通过AddRazorRuntimeCompilation依赖注入中间件实现页面修改热加载(Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation)。

    builder.Services

        .AddControllersWithViews()

        .AddRazorRuntimeCompilation();

    1.3为连接指定数据库软件及其数据库配置连接字符串(appsettings.json)

       "ConnectionStrings": {

            //Trusted_Connection=true或Integrated Security=true/SSPI:“Windows凭据”对SQL Server进行身份验证,表示可以在不知道数据库用户名和密码的情况下时,依然可以连接SQL Server数据库。

            //"integrated":"security=true是通过“Windows身份认证”对SQL Server数据库进行身份验证,并与SQL Server数据库进行连接;表示可以在不知道数据库用户名和密码的情况下时,依然可以连接SQL Server数据库,如果integrated", "security=false","或者不写,表示一定要输入正确的数据库登录名和密码。": null。

            //Persist Security Info:该配置只用于通过“SQL Server身份认证”对SQL Server数据库进行身份验证,并与SQL Server数据库进行连接;简单的理解为"ADO在数据库连接成功后是否保存密码信息",True表示保存,False表示不保存.ADO缺省为True(ADO.net缺省为False,未测试,根据参考资料上说的)。

            //MultipleActiveResultSets:它允许在单个连接上执行多重的数据库查询或存储过程,目前只适用于Sql Server 2005及其以上版本;如果不用MultipleActiveResultSets ,则一般报错为sqldatareader未关闭,即需要关闭了之后才能打开另一个。

            //Trust Server Certificate:是否使用SSL证书和加密方式,对SQL Server数据库的连接字符串进行加密,该操作属性安全性配置,目前只适用于Sql Server 2005及其以上版本;

            "SqlServerWindows": "Data Source=.;Initial Catalog=JsonTable;Integrated Security=true;MultipleActiveResultSets=true;Trust Server Certificate=True",

            "SqlServerSQL": "Data Source=.;Initial Catalog=JsonTable;Integrated Security=False;Persist Security Info=False;User ID=zz;Password=zz;MultipleActiveResultSets=true;Trust Server Certificate=True"

        },

    2 通过执行迁移和更新命令行自动生成数据库

    2.1 重构EntityFrameworkCore数据库数据CURD交换操作上下文类构造方法定义

    #region 拷贝构造方法

            ///

            /// 【拷贝构造方法】

            ///

            /// 摘要:

            ///    基类构造通过该构造方法中的参数实例,连接到指定数据库(SQL Server)数据库软件中数据库。

            ///

            ///

            public EFCoreContext(DbContextOptions options) : base(options)

            {

                //如果(SQL Server)数据库软件中没有指定的数据库, 当通过Code First模式时,在第1次生成数据库时,则通过下1行语句结合数据库连接字符串,在(SQL Server)数据库软件中生成指定的数据库数据库、表、字段和约束规则。

                //Database.EnsureCreated();

                /*

                如果(SQL Server)数据库软件中没有指定的数据库, 当通过Code First模式时,在第1次生成数据库时,则也通过下行执行迁移和更新命令行的结合数据库连接字符串,在(SQL Server)数据库软件中生成指定的数据库数据库、表、字段和约束规则。

                Add-Migration Initialize(Initialize:自动生成的迁移类名,这里特指:20220803125612_Initialize.cs):

                Update-Databas Initialize(通过自动生成的迁移类中的定义,自动在指定的数据库软件中生成指定的数据库、表、字段和约束规则)

                 */

            }

            #endregion

    2.2 执行Add-Migration Initialize命令行


       

    通过Add-Migration Initialize命令行,在程序中自动生成迁移类定义。

        注意:20220803125612_Initialize.cs,为迁移类的执行操作定义,EFCoreContextModelSnapshot.cs为与迁移类的执行操作相关联的数据库数据交换上下文的约束规则定义。

    2.3 执行Update-Database Initialize命令行

        注意:Update-Database Initialize命令行的执行,只用于通过程序自动生成的迁移类,以CodeFrist模型方式,自动在指定数据库软件(这里特指:SQL Server)中新建指定数据库、数据库表、字段及其相应约束规则。

    对以上功能更为具体实现和注释见:22-08-03-061_JsonTable(EntityFrameworkCore自动新建数据库)。

  • 相关阅读:
    linux删除 buff/cache缓存
    全球与中国板上芯片LED行业发展规模及投资前景预测报告2022-2028年
    3分钟轻松实现网关网口远程监控安川PLC
    公司文件防泄密软件——「天锐绿盾」@德人合科技
    对于机器学习的回答
    采用CNN-LSTM与迁移学习的虚假评论检测
    链表的归并排序-LeetCode(Python版)
    Oracle EBS fndgfm.jsp error : 您没有访问此文件内容的权限
    二进制安装Docker
    [2022世界杯] 小白也可以看懂的世界杯
  • 原文地址:https://blog.csdn.net/zhoujian_911/article/details/126150326