ASP.NET Core使用EFCore

本文介绍如何使用EFCore进行快速配置及数据库模型自动生成的方法。包括安装必要包、配置连接字符串、服务注入步骤,并通过Nuget控制台命令实现数据库模型自动生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用EFCore首先需要安装以下几个包,直接Nuget

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Relational
Microsoft.EntityFrameworkCore.SqlServer

2、配置连接字符串,这里使用上一节的加密算法来配置appsettings.json连接字符串

这里需要注意,填充的一定是你的连接字符串加密数据,而不是我的加密串,别混淆

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    /***********数据库加密字符串***********/
    "DBContext": "sv4VvFJ8Q9DjT1pYTb3s5cftFxB5OkExc4EozwQBqqb+cjiIgKATHdlSmGl4s6w+/QLssVzhOGtOXGQKNxjbNoQCv6O7VaLK46a9L9hRQ7iUFJwrios/iK6D/J6xfxdzs0M2ADnBYqMpOSp88m6bobD7qNstEWnxQ8nYvek="
  }
}

3、在Web层ASP.NET Core项目的Startup.cs启动类的ConfigureServices方法中进行注入

        /// <summary>
        /// 此方法由运行时调用,使用此方法可将服务添加到容器中
        /// </summary>
        public void ConfigureServices(IServiceCollection services)
        {           
            //解密数据库的加密连接字符串
            string DBContext = AESKeyEncrypt.DecryptKey(Configuration.GetConnectionString("DBContext"));
            services.AddDbContext<SNKContext>(options => options.UseSqlServer(DBContext));//EFCore注入

            //注入自启动
            services.AddControllersWithViews().AddRazorRuntimeCompilation();
        }

4、到此呢,整个EFCore注入已经完成,可能你会有疑问,好像还什么都没干呢?对,确实好像什么都还没干,但我接下来说的,会让你觉得EFCore的配置,其实已经做完了。

我们打开Nuget的控制台PowerShell(打开方式):
工具→Nuget包管理器→程序包管理控制台
输入以下命令(记得更改成你的地址):

(1)、该命令表示首次创建

Scaffold-DbContext "server=.;database=database;uid=sa;password=123456;Trusted_Connection=false;MultipleActiveResultSets=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir SNKModel

(2)、当已经创建过模型,数据库又新增数据表模型,使用-force命令进行更新

Scaffold-DbContext "server=.;database=database;uid=sa;password=123456;Trusted_Connection=false;MultipleActiveResultSets=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir SNKModel -force

5、执行命令后,自动生成模型,如图(类似):
在这里插入图片描述

这些均是应用程序根据连接字符串的数据库表自动生成的,对,你没有眼花,更没有看错,就是这么神奇,上图的每个类对应你的数据库每一张表,也就是说,只要你的连接字符串配置正确,输入一下命令以后,即可自动生成。怎么样,是不是相当nice!下面让你感受一下它的强大,它会根据你的外键、日期、以及Not Nulll等属性生成完全配置好的数据模型,以下是我数据库模型生成的关联属性:

modelBuilder.Entity<Depart>(entity =>
            {
                entity.Property(e => e.Id).HasMaxLength(200);

                entity.Property(e => e.DepartName).HasMaxLength(200);

                entity.Property(e => e.SorTime).HasColumnType("datetime");
            });

            modelBuilder.Entity<Exc>(entity =>
            {
                entity.Property(e => e.Id).HasMaxLength(200);

                entity.Property(e => e.Data).HasMaxLength(500);

                entity.Property(e => e.HelpLink).HasMaxLength(500);

                entity.Property(e => e.Ip).HasMaxLength(200);

                entity.Property(e => e.Message).HasMaxLength(500);

                entity.Property(e => e.SorTime).HasColumnType("datetime");

                entity.Property(e => e.Source).HasMaxLength(500);

                entity.Property(e => e.StrackTrace).HasColumnType("text");

                entity.Property(e => e.TargetSite).HasMaxLength(500);
            });

            modelBuilder.Entity<Log>(entity =>
            {
                entity.Property(e => e.Id).HasMaxLength(200);

                entity.Property(e => e.Ip).HasMaxLength(200);

                entity.Property(e => e.SorTime).HasColumnType("datetime");

                entity.Property(e => e.Url).HasMaxLength(200);

                entity.Property(e => e.Userid).HasMaxLength(200);

                entity.HasOne(d => d.User)
                    .WithMany(p => p.Log)
                    .HasForeignKey(d => d.Userid)
                    .HasConstraintName("FK_SNK_Log_SNK_User");
            });

            modelBuilder.Entity<Menu>(entity =>
            {
                entity.Property(e => e.Id)
                    .HasMaxLength(200)
                    .HasComment("主键");

                entity.Property(e => e.Icon)
                    .HasMaxLength(200)
                    .HasComment("小图标");

                entity.Property(e => e.IsOpen).HasComment("展开标识");

                entity.Property(e => e.ParentId)
                    .HasMaxLength(200)
                    .HasComment("父节点");

                entity.Property(e => e.SorTime)
                    .HasColumnType("datetime")
                    .HasComment("排序时间");

                entity.Property(e => e.TabId).ValueGeneratedOnAdd();

                entity.Property(e => e.Title)
                    .HasMaxLength(200)
                    .HasComment("菜单名称");

                entity.Property(e => e.Url)
                    .HasMaxLength(200)
                    .HasComment("url");

                entity.HasOne(d => d.Parent)
                    .WithMany(p => p.InverseParent)
                    .HasForeignKey(d => d.ParentId)
                    .HasConstraintName("FK_SNK_Menu_SNK_Menu");
            });

            modelBuilder.Entity<Rights>(entity =>
            {
                entity.Property(e => e.Id).HasMaxLength(200);

                entity.Property(e => e.MenuId)
                    .IsRequired()
                    .HasMaxLength(200);

                entity.Property(e => e.RoleId).HasMaxLength(200);

                entity.HasOne(d => d.Menu)
                    .WithMany(p => p.Rights)
                    .HasForeignKey(d => d.MenuId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_SNK_Right_SNK_Menu");

                entity.HasOne(d => d.Role)
                    .WithMany(p => p.Rights)
                    .HasForeignKey(d => d.RoleId)
                    .HasConstraintName("FK_SNK_Right_SNK_Role");
            });

            modelBuilder.Entity<Role>(entity =>
            {
                entity.Property(e => e.Id).HasMaxLength(200);

                entity.Property(e => e.RoleName).HasMaxLength(200);

                entity.Property(e => e.SorTime).HasColumnType("datetime");
            });

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

                entity.Property(e => e.Id).HasMaxLength(200);

                entity.Property(e => e.RoleId).HasMaxLength(200);

                entity.Property(e => e.UserId).HasMaxLength(200);

                entity.HasOne(d => d.Role)
                    .WithMany(p => p.Urole)
                    .HasForeignKey(d => d.RoleId)
                    .HasConstraintName("FK__SNK_UR__rid__17F790F9");

                entity.HasOne(d => d.User)
                    .WithMany(p => p.Urole)
                    .HasForeignKey(d => d.UserId)
                    .HasConstraintName("FK__SNK_UR__uid__17036CC0");
            });

            modelBuilder.Entity<Users>(entity =>
            {
                entity.Property(e => e.Id).HasMaxLength(200);

                entity.Property(e => e.Account).HasMaxLength(200);

                entity.Property(e => e.Email).HasMaxLength(200);

                entity.Property(e => e.Image).HasMaxLength(200);

                entity.Property(e => e.Password).HasMaxLength(200);

                entity.Property(e => e.Phone).HasMaxLength(200);

                entity.Property(e => e.Sex).HasMaxLength(10);

                entity.Property(e => e.SorTime).HasColumnType("datetime");

                entity.Property(e => e.TrueName).HasMaxLength(200);
            });

你也赶快去试试吧,时间总是不等人的唷!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值