EF核心未在迁移方法上创建表

Jaj*_*jan 2 c# sql-server entity-framework-core asp.net-core

嘿,我刚刚开始使用EF core,一切正常。我调用该context.Database.Migrate()方法,它创建一个数据库。但是,即使我的上下文对象具有DBSet<T>,它也不会创建任何表,但迁移历史记录除外。

谁能帮我解决这个问题?

swa*_*ers 12

所以我和这个问题斗争了很长时间,也想不通。我的迁移位于应用程序项目中,而我的 DbContext 位于另一个项目中。

在为要应用迁移的上下文创建选项时,您需要指定 MigrationAssembly。

serviceCollection.AddDbContext<YourContext>(options => options.UseSqlServer(_configuration.GetConnectionString("ConnectionString"), b => b.MigrationsAssembly("Your.Assembly")));
Run Code Online (Sandbox Code Playgroud)


Rud*_*ser 8

context.Database.Migrate()本身不会产生迁移。相反,它将处理您创建的迁移。

对于每个数据库更改,您都应致电Add-Migration {sensibleName}

您的启动类将继续调用context.Database.Migrate()它将检查您的数据库并处理所有未完成的迁移。

例如,创建数据库后,一般规则是调用Add-Migration Initial。调用context.Database.Migrate()一次将检查您的数据库是否存在,如果不存在,请创建数据库,检查是否Initial已应用迁移,否则请应用数据库。

如果您随后调用Add-Migration SmallChange,则下次启动时也会发生相同的情况,类似于以下内容:

  1. 数据库是否存在?是
  2. 是否已应用Migration Initial?是
  3. 迁移SmallChange是否已应用?没有
  4. 应用迁移SmallChange

您的第一次迁移应该看起来像这样:

public partial class Initial : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "HelloWorld",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                MyString = table.Column<string>(nullable: true),
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您的迁移情况不理想,则可能是您的DbContext配置不正确。如果仍未应用表,请尝试从Package Manager控制台运行数据库更新,并查看到底发生了什么Update-Database -Verbose

  • 好吧-在SQL Server Management Studio(或您使用的任何工具)中,删除已创建的数据库。清除您的Migrations文件夹,然后再次尝试“ Add-Migration Initial”。 (3认同)

小智 5

我做了以下工作:

  1. 删除我的 APP 项目中的 Migrations 文件夹。
  2. 站在 DataAccess 项目上,我在其中声明了持久性(EF、Dbcontext 等) 2.1 Add-Migration Initial 。2.2 从控制台更新数据库。