• ASP.NET CORE中使用EF CORE


    准备工作

    首先,我们打开vs中的NuGet包安装以下的库:

    Microsoft.EntityFrameworkCore.SqlServer(连接sql server数据库的包)

    Microsoft.EntityFrameworkCore.Tools(命令行所需的库)

    Microsoft.EntityFrameworkCore.Design(vs code命令行所需的库,但是我用的是vs2019,所以这个不需要安装)

    如果你使用mysql,那么下面的包替换sql servcer包,其他的不变:

    Pomelo.EntityFrameworkCore.MySql

    或者

    MySql.Data.EntityFrameworkCore(官方包)

    创建模型

    public class Province
    {
            
        public int Id { get; set; }
    
        public string Name { get; set; }
    
        public int Population { get; set; }
    
          
    }

    创建DbContext

    using Microsoft.EntityFrameworkCore;

    public
    class MyContext : DbContext { public MyContext(DbContextOptions<MyContext> options) : base(options)   {

    }
    public DbSet<Province> Province { get; set; } }

     在appsettings.json文件中写好连接字符串

    {
     //连接的字符串
     "ConnectionStrings": {
      "DefaultConnection": "Server=(localdb)\mssqllocaldb;Database=EFCOREDATABASE;Integrated Security=True",
      "mysqlDefaultConnection": "Server=localhost;Database=EFCOREDATABASE;uid=root;pwd=123456"
     },
     "Logging": {
      "LogLevel": {
       "Default": "Information",
       "Microsoft": "Warning",
       "Microsoft.Hosting.Lifetime": "Information"
      }
     },
     "AllowedHosts": "*"
    }

     在Startup.cs文件中的ConfigureServices方法中引用

    services.AddDbContext<MyContext>(options =>
     {
       options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
    
       //连接MySQL字符串
       //options.UseMySql(Configuration.GetConnectionString("mysqlDefaultConnection"));
     });

     打开命令面板输入命令生成数据库

     我们输入get-help entityframework获取以下命令,但是我们只需要用第一个和最后一个那么就完成了我们数据库生成了

    Add-Migration 添加迁移
    Drop-Database 删除数据库
     Get-DbContext 获取DbContext
    Remove-Migration 删除迁移
    Scaffold-DbContext 脚手架数据库上下文
    Script-Migration 脚本迁移
     Update-Database 更新数据库

    生成以下的文件后,我们在update-database,那么我们的数据库就生成成功了。

     

    看到以下内容那么就OK了。

     

     自动迁移

    控制台启动程序中添加代码(这里说明下,我把CreateWebHostBuilder()方法删了,代码全部放在Main()中了):

     public class Program
        {
            public static void Main(string[] args)
            {
    
                IHostBuilder hostBuild = Host.CreateDefaultBuilder(args);
                hostBuild.ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
                var host = hostBuild.Build();
                using (var scope = host.Services.CreateScope())
                {
                    try
                    {
                        var db = scope.ServiceProvider.GetRequiredService<MyContext>();
                        //Migrate()方法使用前需在程序包管理控制台执行Add-migration迁移命令。
                        //之后程序每次启动,GetPendingMigrations()都会去检测是否有待迁移内容,有的话,自动应用迁移。
                        if (db.Database.GetPendingMigrations().Any())
                        {
                            db.Database.Migrate(); //执行迁移
                        }
                        //EnsureCreated方法不需要先执行Add-migration迁移命令,如果数据库不存在,则自动创建并返回true。
                        //如果已经创建了数据库后,又改动了实体Model和之前的库存在冲突,要注意删库让它自动重建,否则会报错。
                        //db.Database.EnsureDeleted();//删除数据库
                        //db.Database.EnsureCreated();
                    }
                    catch (Exception ex)
                    {
    
                        var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>();
                        logger.LogError(ex, "Database Migration Error!");
                        throw;
                    }
                }
    
                host.Run();
            }
        }
  • 相关阅读:
    如何根据当前日期生成一张表
    如何使用Navicat 创建一个SqlServer定时任务
    python接口自动化-post请求2
    python接口自动化-post请求1
    python接口自动化-get请求
    测试通过与失败的标准
    需求规格说明书(SRS)特点
    测试用例设计方法
    系统测试知识
    jenkins之Job建立-运行 git 脚本
  • 原文地址:https://www.cnblogs.com/-zzc/p/13532849.html
Copyright © 2020-2023  润新知