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

时间:2018-05-20 16:19:35

标签: c# sql-server asp.net-core entity-framework-core

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

任何人都可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:6)

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

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

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

例如,一旦创建了数据库,一般规则就是调用Add-Migration Initial。调用context.Database.Migrate()一次将检查您的数据库是否存在,如果没有则创建它,检查是否应用了Initial迁移,如果没有则应用它。

如果您再拨打Add-Migration SmallChange,下次启动会发生同样的情况,类似于以下内容:

  1. 数据库是否存在?是
  2. 是否已应用迁移初始化?是
  3. 是否已应用迁移SmallChange?否
  4. 应用迁移SmallChange
  5. 您的首次迁移应该看起来像这样:

    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),
                });
        }
    }
    

    如果您的迁移不是这样,可能是您的DbContext配置不正确。如果您的表仍未应用,请尝试从Package Manager控制台运行数据库更新,并查看Update-Database -Verbose

    的具体情况

答案 1 :(得分:2)

我做了以下工作:

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

答案 2 :(得分:0)

所以我为此奋斗了很长时间,无法弄清楚。我的迁移在应用程序项目中,而我的DbContext在另一个项目中。

为上下文创建选项时,要将迁移应用到其中,需要指定MigrationAssembly。

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

答案 3 :(得分:0)

我会补充标记为正确的答案。就我而言,迁移不起作用,尽管一切都如上面的答案一样。 EF 工具更新对我有帮助:dotnet tool update --global dotnet-ef