• 5、使用DB first创建数据库并使用Migration进行迁移


    1、项目WebApp_DEMO添加数据上下文

         在Repository文件夹中添加DemoDbContext类,继承DbContext,添加引用:using Microsoft.EntityFrameworkCore;

         将实体类Login添加到Dbset,添加引用:using WebApp_DEMO.Models;

    using Microsoft.EntityFrameworkCore;
    using WebApp_DEMO.Models;
    
    namespace WebApp_DEMO.Repository
    {
        public class DemoDbContext: DbContext
        {
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                optionsBuilder.UseSqlServer(@"server=127.0.0.1;database=WebApp_DEMO;uid=sa;pwd=1234");
            }
            /// <summary>
            /// 实体类添加到DbSet
            /// </summary>
            public DbSet<Login> Logins { get; set; }
    
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Login>().ToTable("Login");
            }
        }
    }
    数据上下文

    2、注入服务

    在Program.cs中注入DemoDbContext,添加引用:

    builder.Services.AddDbContext<DemoDbContext>();

     3、创建数据库配置Migration

    在程序包管理器控制台中

    PM> add-migration init

    初始化成功后,控制台返回“Build succeeded”信息。同时,项目中生成一个Migrations文件夹,里面是迁移记录。

    其中:xxx_init.cs是主迁移文件,包含应用迁移所需的操作 Up() 和还原迁移所需的操作Down()

    xxx_init.Designe.cs迁移元数据文件。 包含 EF 所用的信息,如给实体类型构建属性、主键、外键、索引、映射到数据表,主体和依赖关系等等。

    PM> update-database

    数据库创建成功后,控制台返回“Done.”信息

    查看数据库,已经生成数据库和数据表

    常见错误及解决:

    错误:ScriptHalted。解决:PowerShell版本低,在官网下载对应版本,网址:https://www.microsoft.com/en-us/download/details.aspx?id=54616

    错误:Your startup project 'WebApp_DEMO' doesn't reference Microsoft.EntityFrameworkCore.Design.解决:缺少NuGet包,在在该项目中安装:Install-Package Microsoft.EntityFrameworkCore.Tools

    错误:对象'PK_xxx' 依赖于 列'xxx'。由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN xxx 失败。解决:sqlserve中直接删除箭的约束,或使用语句alter table TableName drop constraint PK_xxx

    4、Code First 数据注释

    使用 DataAnnotations,可以将 Code First 类映射到预先存在的数据库

    [Key]
    [Required]
    [StringLength(50)]
    [Display(Name = "First Name")]
    [Column("FirstName")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]

    参考:https://blog.csdn.net/qq_39569480/article/details/114319127

    项目地址:https://files.cnblogs.com/files/shiliumu/App_P5.rar?t=1649840339

  • 相关阅读:
    Go 好用第三方库
    Go 的beego 框架
    Go 的gin 框架 和 gorm 和 html/template库
    Go 常用的方法
    Dijkstra 的两种算法
    邻接矩阵
    next permutation 的实现
    最优二叉树 (哈夫曼树) 的构建及编码
    思维题— Count the Sheep
    STL— bitset
  • 原文地址:https://www.cnblogs.com/shiliumu/p/16134248.html
Copyright © 2020-2023  润新知