EF迁移显示空的Up()Down()方法

use*_*243 50 c# entity-framework database-migration

我有一个当前的第二个版本的本地数据库,现在应该转到它的第三个版本.

以前迁移的代码是由另一个程序员生成的,所以我假设我在这里做错了.

在我的模型中有大约30个类,在模型文件夹中有一个映射文件夹,它包含这30个类的映射.

所以现在我以与之前的类相同的方式添加了1个新类,然后在包管理器控制台中运行add-migration命令.

幸运的是,我获得了一个空迁移Up()和Down()方法.

当我查看数据库时,有一个__migrationHistory可用于前两次迁移.如果我现在运行我的应用程序,也会添加第三个迁移,但显然没有创建新表,因为它不在Up()方法中.

我能做错什么?

我认为在搭建以前的迁移时会出现问题......就像它找不到我添加的新的Code-First类一样.

这是我的命令:

add-migration "1.2" -verbose -ProjectName "MyEFproject"
Run Code Online (Sandbox Code Playgroud)

我假设脚手架不知道在哪里寻找新类...或者按照惯例,所有模型类都只是在项目中?

添加迁移的结果:

namespace MyProject.Migrations
{
using System;
using System.Data.Entity.Migrations;

public partial class _1002 : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}
}
Run Code Online (Sandbox Code Playgroud)

新模型类的示例:

using System;
using System.Collections.Generic;

namespace MyProject.Models
{
public partial class MyTable
{

    public string SomeId { get; set; }
    public string SomeText { get; set; }


}
}
Run Code Online (Sandbox Code Playgroud)

新Mapping类的示例

using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace MyProject.Models.Mapping
{
 public class MyTableMap : EntityTypeConfiguration<MyTable>
{

    public MyTableMap()
    {
        // Primary Key
        this.HasKey(t => t.SomeId);

        // Properties
        this.Property(t => t.SomeText)
            .IsRequired()
            .HasMaxLength(30);



        // Table & Column Mappings
        this.ToTable("MyTable", "database");
        this.Property(t => t.SomeId).HasColumnName("SomeId");
        this.Property(t => t.SomeText).HasColumnName("SomeText");


    }




   }
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

Cod*_*gue 83

您需要将表添加到DbContext类的实现中,例如

public class MyDatabaseEntities : DbContext {
    public virtual DbSet<MyTable> MyTable { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 在我的情况下,我已经在dbcontext中添加了模型.但仍然`add`和`down`是空的 (16认同)
  • 我遇到了与@NithinChandran相同的问题,我通过在迁移命令中添加`-Force`解决了该问题。 (2认同)
  • 不要忘记使用 virtual 关键字 (2认同)

Tom*_*nak 15

我能够通过从_MigrationHistory表中删除上次迁移的记录来解决此问题.在将新模型对象的DbSet添加到DbContext类之前,此记录未正确创建.删除后,使用正确的Up()和Down()方法创建了新的迁移.

  • 我之前创建了这些表,因此还需要一个步骤来完成这项工作 - 删除迁移文件夹下的ProjectnameContextModelSnapshot.cs文件中的新表/sf/ask/3214083141/空 (2认同)

Jer*_*ith 8

在将现有的EF Core Data Context回滚为空的同时,直到删除与迁移相关的,我的迁移才会生成ApplicationDbContextModelSnapshot

此类是自动生成的,需要与您当前的迁移级别保持一致。

  • 这为我解决了问题。我只是删除 ModelSnapshot 文件,当我重新运行 Add-Migration 命令时它会自动生成。谢谢 (3认同)
  • 删除 ModelSnapshot 会导致新迁移从头开始创建整个数据库,而不是从上次应用的迁移升级架构。完成此操作后,我必须删除所有迁移并重新开始。 (3认同)

use*_*723 8

我有这个问题,因为我忘记添加{get; 在我的变量名之后设置;}

  • 是的,这就是我的情况,我忘记了太多 public DbSet&lt;Value&gt; values { get; 放; } (2认同)

Hyd*_*hie 7

您需要将表添加到 DbContext 类的实现中,例如,在将现有 EF Core 数据上下文回滚到空时,我的迁移不会生成,直到我删除伴随迁移的ApplicationDbContextModelSnapshot 。


Viv*_*Dev 5

就我而言,datacontext 项目是一个类库项目。它不同于启动项目,即 asp.net mvc 5 项目。现在错误地启动项目中的连接字符串指向不同的数据库。

所以确保datacontext项目和启动项目指向同一个数据库。还可以使用问题中提到的完整命令,如下所示。您也可以包括 -Force。

add-migration "InitialMigration" -verbose -ProjectName "MyEFproject" -Force
Run Code Online (Sandbox Code Playgroud)

  • 错误:“Add-Migration:找不到与参数名称‘Force’匹配的参数”。我假设这适用于旧版本并且不再有效。 (3认同)