将新表添加到现有EF模型而不会丢失现有数据

时间:2015-01-22 11:11:32

标签: c# entity-framework

我有一个使用Entity Framework创建的现有Code First模型。 已经创建了表和SQL Express,并且在大多数表中都有记录。

现在我想使用Code First方法添加一个新表。

问题在于我还没有找到任何简单的解决方案来自动添加。我尝试了以下方法:

  1. 使用Update-Database -ConnectionStringName
    • 不起作用,因为它想要先删除所有表,即使我的更新只是新表的添加
  2. 向MyContext构造函数添加以下行:

    Database.SetInitializer< MyContext>(new MigrateDatabaseToLatestVersion< MyContext,Configuration>());

    • 再次,不起作用,因为这不期望任何表存在于数据库中。坦率地说,为什么它被称为"迁移"何时无法满足迁移现有数据的需求?它应该被称为" Creation"?
  3. 它的唯一工作方式是手动解决方法,将所有现有数据备份到CSV,删除整个数据库,然后使用BULK INSERT将数据放回原处。然而,这是我想避免的手动操作。

    EF6是否仍然无法自动处理这样的基本模型更改?

1 个答案:

答案 0 :(得分:0)

如果您的数据库由实体框架创建,则它有一个名为" __ MigrationHistory"的表。实体框架创建/使用该表来保存数据库的迁移历史记录。 您可以为DbContext添加配置:

public class Configuration : DbMigrationsConfiguration<YourDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;
         }

        protected override void Seed(YourDbContext context)
        {
           base.Seed(context);

        }
    }

在您的应用程序起始位置(在winForms应用程序program.cs-&gt;主类中),您应该写:

System.Data.Entity.Database.SetInitializer(new 
System.Data.Entity.MigrateDatabaseToLatestVersion<YourDbContext, 
YourNameSpace.Configuration>());