[.net]EF中重建数据库

2022-12-08 11:35:09 浏览数 (1)

做了一个.net MVC的练习,使用了EF,手动修改了Modal中的数据的类型,需要重新生成数据库。

使用下面的方法,虽然不是最好的,权且记录一下。

背景说明

正常情况下,在PMC中执行如下命令

代码语言:text复制
Add-Migration InitialCreate

会在项目中生成一个这样的文件,

Migrations/{timestamp}_InitialCreate.cs

该文件的内容如下:

代码语言:c复制
using System;
using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace MvcMovie.Migrations
{
    public partial class InitialCreate : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "Movie",
                columns: table => new
                {
                    Id = table.Column<int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Title = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    ReleaseDate = table.Column<DateTime>(type: "datetime2", nullable: false),
                    Genre = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Movie", x => x.Id);
                });
        }

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

再执行

代码语言:text复制
Update-Database

至此,数据库中会实际的表了。

问题

如果将modal中的某个字段的类型修改了,编译的时候会报错,将相关文件修改以后,需要将修改同步到数据库中。

执行如下命令,报错了。

代码语言:text复制
Add-Migration InitialCreate
Update-Database

查看Migrations下的MvcMovieContextModelSnapshot文件,发现其中的类型并没有修改。

解决方法

很粗暴的解决方法,将Migrations下的MvcMovieContextModelSnapshot文件和{timestamp}_InitialCreate文件删除。将数据库也删掉。然后执行

代码语言:text复制
Add-Migration InitialCreate
Update-Database

就好了。

显然这个方法是有问题的。下面这个文章写得貌似比较清楚。可参考。

https://zhuanlan.zhihu.com/p/196761386

另外,练习项目是参考的https://learn.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-7.0&tabs=visual-studio


0 人点赞