EF Core CLI的具体应用-如何将数据库中的表生成我们想要的模型

本文介绍了如何使用EFCoreCLI工具将SQLServer数据库中的表转换为C#实体模型,并详细展示了遇到的问题及解决过程。通过指定`--output-dir`选项,可以将生成的文件存放在自定义的文件夹中,便于项目管理。最后,文章总结了利用CLI工具自动化生成数据库实体的方法。
摘要由CSDN通过智能技术生成

前文中已经介绍了EF Core CLI,本篇文章继续进行实际的CLI的应用

基于上篇文章中的项目继续进行演示

如何将数据库中的表生成我们想要的模型

第一步:创建数据库,这里我采用的是sqlserver数据库

我们创建一个名为school的数据库

然后添加教师表-teacher

下一步我们找到我们项目工程文件夹,通过命令切换到指定的文件夹

执行命令

dotnet ef dbcontext scaffold "Server=127.0.0.1;Database=School;Trusted_Connection=True;User id=sa; Password=*******;" Microsoft.EntityFrameworkCore.SqlServer

但是结果总是这么不顺利,出现了错误

分析了一下错误原因,原来是咱们的项目中没有引用Microsoft.EntityFrameworkCore.Design的包导致的

我们引用一下看看

然后我们再次尝试运行命令

依然报错,这是什么原因呢?

我们尝试一下先保存文件看看,是不是由于没有保存项目工程文件导致的呢,毕竟如果引用了nuget包项目工程文件就发生了变化

再次尝试运行命令

OK,搞定了,我们看一下生成的文件

我们的解决方案中多出了两个文件,一个是数据的上下文类,一个是我们的模型类

我们来看一下代码

Teacher类

    public partial class Teacher
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime InductionTime { get; set; }
        public DateTime CreateTime { get; set; }
        public bool IsDetele { get; set; }
    }

SchoolContext类

    public partial class SchoolContext : DbContext
    {
        public SchoolContext()
        {
        }

        public SchoolContext(DbContextOptions<SchoolContext> options)
            : base(options)
        {
        }

        public virtual DbSet<Teacher> Teachers { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
                optionsBuilder.UseSqlServer("Server=127.0.0.1;Database=School;Trusted_Connection=True;User id=sa; Password=******;");
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.HasAnnotation("Relational:Collation", "Chinese_PRC_CI_AS");

            modelBuilder.Entity<Teacher>(entity =>
            {
                entity.ToTable("Teacher");

                entity.Property(e => e.Age).HasComment("年龄");

                entity.Property(e => e.CreateTime)
                    .HasColumnType("datetime")
                    .HasComment("创建时间");

                entity.Property(e => e.InductionTime)
                    .HasColumnType("datetime")
                    .HasComment("入职时间");

                entity.Property(e => e.IsDetele).HasComment("是否删除");

                entity.Property(e => e.Name)
                    .IsRequired()
                    .HasMaxLength(50)
                    .HasComment("名称");
            });

            OnModelCreatingPartial(modelBuilder);
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    }

OK 至此我们成功的基于我们的数据创建了数据库实体

但是发现特别是这个数据库上下文,我们完全弄不懂里面到底是做了什么,后面的文章中我会一点点讲解上下文这块代码

现在我们发现了一个问题,这个类文件我们都放到了项目的根目录下面,我们是不是可以对咱们生成的模型文件单独创建一个文件夹然后进行统一的管理呢?

通过查看上一篇文章中的讲解,我们发现可以使用 --output-dir <PATH>这个选项进行配置

首先我们先将已经生成的文件删除,保持一个空的项目工程

然后我们执行命令

dotnet ef dbcontext scaffold "Server=127.0.0.1;Database=School;Trusted_Connection=True;User id=sa; Password=******;" Microsoft.EntityFrameworkCore.SqlServer -o Models

ok,执行成功

我们看一下结果

发现我们的项目工程中多了个文件夹,并且我们生成的文件都放入了这个文件夹中

生成的类文件的命名空间也发生了变化,是不是很神奇,CLI不光给我们创建了文件夹,还将文件夹放入到我们的项目工程文件中而且生成的文件的命名空间都给进行了改变

其他的选项我就不进行演示了,基本原理都是一样的,各位有兴趣可以自己尝试一下

现在我们做个总结 通过本文我们了解到EF core是如何通过CLI工具将数据库中的表创建成我们想要的实体并我们可以指定文件夹来保存生成的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值