【问题标题】:Entity framework 6 add-migration adding all tables/entities in Migration Script实体框架 6 add-migration 在迁移脚本中添加所有表/实体
【发布时间】:2014-10-20 11:08:48
【问题描述】:

我正在尝试在实体框架 6.0 中运行代码优先迁移。我在实体模式中添加了 4 个新实体。但是,当我在 VS 2013 中运行“add-migration”命令时,生成的迁移文件包含我的模态中所有授权的脚本(就像初始迁移一样),尽管它们已经在链接数据库中。显然,当我朗姆酒“更新数据库”推荐时,它会生成实体已经存在的错误。我的 DBContext 类如下所示:

public class BidstructDbContext : DbContext
{
    public BidstructDbContext() : base(nameOrConnectionString: "Bidstruct") 
    {
        this.Configuration.LazyLoadingEnabled = false; 
    }

    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<Permission> Permissions { get; set; }
    public DbSet<Company> Company { get; set; }

    // New Added Table
    public DbSet<Gadgets> Gadgets { get; set; }
    public DbSet<Language> Language { get; set; }
    public DbSet<LanguageKeys> TranslationKeys { get; set; }
    public DbSet<Translations> Translations { get; set; }


    static BidstructDbContext()
    {
        Database.SetInitializer(new DatabaseInitializer());
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
    }      

}

DatabaseInitializer 类如下所示:

public class DatabaseInitializer :
// CreateDatabaseIfNotExists<BidstructDbContext>      // when model is stable
DropCreateDatabaseIfModelChanges<BidstructDbContext> // when iterating
{
    private const int AttendeeCount = 1000;

    // EF is NOT a good way to add a lot of new records.
    // Never has been really. Not built for that.
    // People should (and do) switch to ADO and bulk insert for that kind of thing
    // It's really for interactive apps with humans driving data creation, not machines
    private const int AttendeesWithFavoritesCount = 4;

    protected override void Seed(BidstructDbContext context)
    {
    }
}

任何想法,如何解决这个问题。几天前它对我来说工作正常,但现在我面临这个问题:(

【问题讨论】:

  • 你试过MigrateDatabaseToLatestVersion而不是DropCreateDatabaseIfModelChanges吗?顾名思义,如果您添加了模型,这将重新创建数据库。
  • 使用 MigrateDatabaseToLatestVersion 后尝试,结果相同
  • 您的迁移文件夹中是否有初始迁移文件,其中包含现有表。
  • 错误是什么?您可以发布从启动 Add-Migration 生成的代码
  • @J.W,是的,我在迁移文件夹中有初始迁移文件。

标签: c# asp.net-mvc entity-framework


【解决方案1】:

检查迁移历史记录中的上下文键是否已更改。

我正在处理一个一直在使用自动迁移的项目,但由于大量的类更改,自动迁移没有发生。在尝试切换到非自动迁移时,Add-Migration 正在重新生成整个架构。 所以我尝试将手动表更改放入 DbMigration 的 Up() 中,这将迁移和条目应用到 __MigrationHistory 表中,但使用不同的上下文键(我的配置文件的命名空间和类名。)

将先前(旧)迁移记录的上下文键重命名为与当前相同的快速测试导致向上/向下迁移正确生成。

即便如此……也可能不是 100%。我的大部分更改都是正确的,但它开始添加一个已经存在的表,然后转身将其删除。

【讨论】:

    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多