iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >EntityFrameworkCore使用控制台程序生成数据库表
  • 503
分享到

EntityFrameworkCore使用控制台程序生成数据库表

2024-04-02 19:04:59 503人浏览 薄情痞子
摘要

目录一、引言1、添加实体类2、添加Mircosoft.EntityFrameworkCore二、生成数据库表1、代码生成2、程序包管理器控制台迁移1、安装Microsoft.Enti

一、引言

我们使用Code First的方式来生成数据库表,我们先讲解如何在控制台项目中生成数据库表。

在前面的文章中,我们是直接在控制台项目中安装的Mircosoft.EntityFrameworkCore,在真实的项目中,我们很少这样使用,都是采用分层的结构,将EF Core有关的操作放在一个单独的类库项目里,下面的例子中我们就以这种分层的结构来进行讲解。项目结构如下图所示:

项目结构:

  • EFCoreTest.Con:控制台项目,用来运行程序,在项目中会引用EFCoreTest.Data。
  • EFCoreTest.Data:类库项目,基于.net Standard。存放的是与EF Core相关的内容。
  • EFCoreTest.Model:类库项目,基于.Net Standard。存放项目中使用到的实体类。

1、添加实体类

我们首先在EFCoreTest.Model类库项目里添加Student实体:

namespace EFCoreTest.Model
{
    public class Student
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        public int Gender { get; set; }
    }
}

2、添加Mircosoft.EntityFrameworkCore

我们在EFCoreTest.Data类库里面添加Mircosoft.EntityFrameworkCore包:

我们使用sqlServer数据库,所以我们还要安装Microsoft.EntityFrameworkCore.sqlServer包:

安装完成以后我们添加EFCoreTest.Model的引用,然后添加数据上下文类,该类继承自DbContext:

using EFCoreTest.Model;
using Microsoft.EntityFrameworkCore;

namespace EFCoreTest.Data
{
    /// <summary>
    /// 数据上下文类,继承自DbContext
    /// </summary>
    public class EFCoreDbContext:DbContext
    {
        /// <summary>
        /// 重写OnConfiguring方法
        /// </summary>
        /// <param name="optionsBuilder"></param>
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            // 使用SqlServer数据库,传递连接字符串
            optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=EFTestDb;User ID=sa;PassWord=123456;");
            base.OnConfiguring(optionsBuilder);
        }

        /// <summary>
        /// 重写OnModelCreating,主要做一些配置
        /// 例如设置生成的表名、主键、字符长度
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            // 设置生成的表名
            modelBuilder.Entity<Student>().ToTable("T_Student");
            // 设置主键,可以不设置,会默认把Id字段当成主键
            modelBuilder.Entity<Student>().HasKey(p => p.Id);
            // 设置Name字段的最大长度
            modelBuilder.Entity<Student>().Property("Name").HasMaxLength(32);
            base.OnModelCreating(modelBuilder);
        }

        // DbSet属性
        public DbSet<Student> Students { get; set; }
    }
}

这些工作做好以后,我们就可以用来生成数据库表了。

二、生成数据库表

我们下面以三种方式来生成数据库表。首先在控制台项目中添加EFCoreTest.Data的引用。

1、代码生成

我们可以使用代码来生成数据库,这样在程序启动的时候调用生成数据库的代码就能自动生成数据库了。代码如下:

using EFCoreTest.Data;
using System;

namespace EFCoreTest.Con
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            EFCoreDbContext dbContext = new EFCoreDbContext();
            bool tfTrue = dbContext.Database.EnsureCreated();
            if (tfTrue)
            {
                Console.WriteLine("数据库创建成功!");
            }
            else
            {
                Console.WriteLine("数据库创建失败!");
            }

            Console.ReadKey();
        }
    }
}

运行程序:

输出结果提示我们创建成功了,在去数据库里面看看:

我们看到数据库和表都已经生成了,而且表里面的字段属性是按照我们在代码里面的设置生成的。

注意:如果这时候在程序启动的时候在去生成数据库就会报错:

2、程序包管理器控制台迁移

除了使用代码的方式生成,我们还可以使用数据迁移命令来生成数据库表,分为下面的三个步骤。

1、安装Microsoft.EntityFrameworkCore.Tools包

要使用数据迁移命令,首先需要安装Microsoft.EntityFrameworkCore.Tools包:

2、添加迁移

首先在数据上下文类的OnModelCreating()方法里面添加一些种子数据,这样生成数据库以后,表里面就有一些基础数据:

using EFCoreTest.Model;
using Microsoft.EntityFrameworkCore;

namespace EFCoreTest.Data
{
    /// <summary>
    /// 数据上下文类,继承自DbContext
    /// </summary>
    public class EFCoreDbContext:DbContext
    {
        /// <summary>
        /// 重写OnConfiguring方法
        /// </summary>
        /// <param name="optionsBuilder"></param>
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            // 使用SqlServer数据库,传递连接字符串
            optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=EFTestDb;User ID=sa;Password=123456;");
            base.OnConfiguring(optionsBuilder);
        }

        /// <summary>
        /// 重写OnModelCreating,主要做一些配置
        /// 例如设置生成的表名、主键、字符长度
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            // 设置生成的表名
            modelBuilder.Entity<Student>().ToTable("T_Student");
            // 设置主键,可以不设置,会默认把Id字段当成主键
            modelBuilder.Entity<Student>().HasKey(p => p.Id);
            // 设置Name字段的最大长度
            modelBuilder.Entity<Student>().Property("Name").HasMaxLength(32);


            base.OnModelCreating(modelBuilder);

            // 添加种子数据
            modelBuilder.Entity<Student>().HasData(
                new Student()
                {
                    Id = 1,
                    Name = "Tom",
                    Age = 24,
                    Gender = 1
                },
                new Student()
                {
                    Id = 2,
                    Name = "Jack",
                    Age = 23,
                    Gender = 2
                },
                new Student()
                {
                    Id = 3,
                    Name = "Kevin",
                    Age = 26,
                    Gender = 2
                }
                );
        }

        // DbSet属性
        public DbSet<Student> Students { get; set; }
    }
}

然后使用下面的命令来添加迁移:

Add-Migration Initial
  • Add-Migration:是迁移命令。
  • Initial:可以理解成是给这次迁移起的一个别名,这个名称可以任意起,只要保证每次迁移的时候不重名即可。

如下图所示:

执行这条命令:

我们看到执行报错了,报错信息提示我们程序的启动项里面也要安装Mircosoft.EntityFrameworkCore.Tools包,我们在控制台程序里面安装这个包,然后在执行迁移命令:

可以看到,这次执行成功了。成功以后会生成一个Migrations文件夹,这个文件夹下面有两个类文件:

20200223132908_Init.cs文件是根据这次迁移生成的文件,里面记录着这次迁移发生的改变:

using Microsoft.EntityFrameworkCore.Migrations;

namespace EFCoreTest.Data.Migrations
{
    public partial class Init : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "T_Student",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Name = table.Column<string>(maxLength: 32, nullable: true),
                    Age = table.Column<int>(nullable: false),
                    Gender = table.Column<int>(nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_T_Student", x => x.Id);
                });

            migrationBuilder.InsertData(
                table: "T_Student",
                columns: new[] { "Id", "Age", "Gender", "Name" },
                values: new object[] { 1, 24, 1, "Tom" });

            migrationBuilder.InsertData(
                table: "T_Student",
                columns: new[] { "Id", "Age", "Gender", "Name" },
                values: new object[] { 2, 23, 2, "Jack" });

            migrationBuilder.InsertData(
                table: "T_Student",
                columns: new[] { "Id", "Age", "Gender", "Name" },
                values: new object[] { 3, 26, 2, "Kevin" });
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "T_Student");
        }
    }
}

里面有下面的两个方法: 

  • Up:该方法是要应用到数据库的配置。
  • Down:该方法相当于是做回滚操作,执行这个方法,可以恢复到上一个状态。

每进行一次迁移就会生成一个这样的文件。

EFCoreDbContextModelSnapshot.cs是根据在OnModelCreating()方法中的配置生成的文件:

// <auto-generated />
using EFCoreTest.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;

namespace EFCoreTest.Data.Migrations
{
    [DbContext(typeof(EFCoreDbContext))]
    partial class EFCoreDbContextModelSnapshot : ModelSnapshot
    {
        protected override void BuildModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("ProductVersion", "3.1.2")
                .HasAnnotation("Relational:MaxIdentifierLength", 128)
                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

            modelBuilder.Entity("EFCoreTest.Model.Student", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<int>("Age")
                        .HasColumnType("int");

                    b.Property<int>("Gender")
                        .HasColumnType("int");

                    b.Property<string>("Name")
                        .HasColumnType("nvarchar(32)")
                        .HasMaxLength(32);

                    b.HasKey("Id");

                    b.ToTable("T_Student");

                    b.HasData(
                        new
                        {
                            Id = 1,
                            Age = 24,
                            Gender = 1,
                            Name = "Tom"
                        },
                        new
                        {
                            Id = 2,
                            Age = 23,
                            Gender = 2,
                            Name = "Jack"
                        },
                        new
                        {
                            Id = 3,
                            Age = 26,
                            Gender = 2,
                            Name = "Kevin"
                        });
                });
#pragma warning restore 612, 618
        }
    }
}

3、更新数据库

执行完上面的步骤,我们执行更新数据库的命令:

Update-Database

如下图所示:

执行成功,查看数据库数据:

T_Student表已经生成了,而且表里面也有添加的种子数据,到此迁移就完成了。

3、命令行迁移

除了上面的两种方式,还可以使用命令行进行迁移,这种方式主要在WEB项目里面比较常用。

使用下面的命令安装:

dotnet tool install --global dotnet-ef

如下图所示:

安装完成以后我们在执行命令:

因为我本机的.NET SDK的版本是3.1.1,刚才安装的dotent-ef的版本是3.1.2,版本不兼容,我们下载最新的.NET SDK,然后安装。

到此这篇关于Entity Framework Core使用控制台程序生成数据库表的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: EntityFrameworkCore使用控制台程序生成数据库表

本文链接: https://www.lsjlt.com/news/143566.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • EntityFrameworkCore使用控制台程序生成数据库表
    目录一、引言1、添加实体类2、添加Mircosoft.EntityFrameworkCore二、生成数据库表1、代码生成2、程序包管理器控制台迁移1、安装Microsoft.Enti...
    99+
    2024-04-02
  • Entity Framework Core如何使用控制台程序生成数据库表
    这篇文章主要介绍了Entity Framework Core如何使用控制台程序生成数据库表,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、引言我们使用C...
    99+
    2023-06-29
  • EntityFrameworkCore对Web项目生成数据库表
    一、引言 这篇文章中我们讲解如何在Web项目中使用EntityFrameworkCore,并生成数据库表,这里以ASP.NET Core WebApi为例讲解。还是采用分层的结构。创...
    99+
    2024-04-02
  • .NET5控制台程序如何使用EF连接MYSQL数据库
    小编给大家分享一下.NET5控制台程序如何使用EF连接MYSQL数据库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用nuget下载:Microsoft.Ext...
    99+
    2023-06-20
  • .NET5控制台程序使用EF连接MYSQL数据库的方法
    1.使用nuget下载: Microsoft.Extensions.Configuration.Json Pomelo.EntityFrameworkCore.MySql 2.数据库...
    99+
    2024-04-02
  • 阿里云控制台数据库怎么用
    简介 阿里云控制台是阿里云提供的一种管理工具,可以帮助用户轻松管理和操作阿里云的各种产品和服务。其中,数据库是阿里云提供的核心服务之一,通过阿里云控制台可以方便地管理和操作数据库。步骤一:登录阿里云控制台首先,打开浏览器,输入阿里云官方网址...
    99+
    2024-01-31
    阿里 控制台 数据库
  • 阿里云数据库控制台怎么用的
    简介 阿里云数据库控制台是阿里云提供的一种管理数据库服务的工具,它可以帮助用户轻松管理和监控自己的数据库实例。本文将介绍如何使用阿里云数据库控制台来管理数据库实例,包括创建、配置和监控等操作。创建数据库实例要使用阿里云数据库控制台,首先需要...
    99+
    2023-12-28
    阿里 控制台 数据库
  • 怎么使用PyQt5制作一个数据图表生成器
    这篇文章主要介绍了怎么使用PyQt5制作一个数据图表生成器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我的需求:手动配置X轴、Y轴、图表标题等参数自动通过Pyecharts...
    99+
    2023-06-29
  • 如何使用Entity Framework Core对Web项目生成数据库表
    小编给大家分享一下如何使用Entity Framework Core对Web项目生成数据库表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、引言这篇文章中我们讲解如何在Web项目中使用EntityFr...
    99+
    2023-06-29
  • Oracle数据库之PL/SQL使用流程控制语句
    目录一、条件分支语句1、if判断2、if else判断3、if elsif  else判断4、CASE 表达式二、循环语句1、loop简单循环(至少执行一次)2. ...
    99+
    2024-04-02
  • 通用MapReduce程序复制HBase表数据
    编写MR程序,让其可以适合大部分的HBase表数据导入到HBase表数据。其中包括可以设置版本数、可以设置输入表的列导入设置(选取其中某几列)、可以设置输出表的列导出设置(选取其中某几列)。 原始表test...
    99+
    2024-04-02
  • Java通过数据库表生成实体类详细过程
    目录项目背景项目代码使用说明配置相关swagger操作目前的缺点项目背景 最近在做的项目,涉及到数据库的操作了,之前做的是直接调用接口,不用做存库操作。 因此要增加大量特殊格式的实体...
    99+
    2023-02-07
    Java数据库表生成实体类 Java生成实体类
  • 使用java怎么自动生成数据库文档
    今天就跟大家聊聊有关使用java怎么自动生成数据库文档,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、引入pom.xml依赖<dependencies> &n...
    99+
    2023-06-15
  • 使用花哨标题生成器优化你的数据库内容表现
    数据库内容往往包含大量技术信息,这可能会使内容难以阅读和理解。然而,通过使用花哨标题生成器等工具,你可以创建引人注目的标题,有效地组织和呈现内容,这不仅可以增强可读性,还能够优化搜索引擎优化(SEO)表现。 改善可读性 花哨标题生成器提...
    99+
    2024-02-18
    数据库标题优化 SEO 内容可读性
  • 怎样使用PowerDesigner生成达梦数据库E-R图
    怎样使用PowerDesigner生成达梦数据库E-R图,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。背景:由于目前的操作系统基本上都是64位的,所以一般安装的都是64的软...
    99+
    2023-06-04
  • 基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】
    1、项目简介 本项目是一套基于JavaSE+JDBC使用控制台操作的简易购物系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经...
    99+
    2023-12-23
    数据库 java 后端 intellij-idea javase JDBC MYSQL
  • 如何使用MySQL进行数据分析和报表生成?
    如何使用MySQL进行数据分析和报表生成MySQL是一种广泛使用的关系型数据库管理系统,用于存储和管理结构化数据。除了作为数据存储和管理工具之外,MySQL还可以用于进行数据分析和报表生成。本文将介绍如何使用MySQL进行数据分析和报表生成...
    99+
    2023-10-22
    数据分析 MySQL 报表生成
  • .NET Core使用EF生成数据库出错怎么解决
    这篇文章主要介绍“.NET Core使用EF生成数据库出错怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.NET Core使用EF生成数据库出错怎么解决”文章能帮助大家解...
    99+
    2023-06-26
  • 怎么在python中使用faker库批量生成假数据
    这篇文章将为大家详细讲解有关怎么在python中使用faker库批量生成假数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。faker使用方法基本使用faker使用起来非常简单,我们看一下就...
    99+
    2023-06-08
  • .NETCore使用EF生成数据库出错的解决方法
    在.NET Core 项目钟(类库),使用Entity Framework,建立模型生成数据库时,失败 Could not load assembly 'xxx'. Ensure i...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作