Code First Migration删除所有数据

时间:2014-11-20 09:20:27

标签: ef-migrations

我在我的Web API(Mobile Service .NET后端)中使用Code First Migrations,每当我的模型发生更改时,所有数据都会从我的数据库中删除。这就是我在做的事情:

  1. 我在模型中添加了一个新属性
  2. 我运行" Add-Migration AddTestProperty"在程序包管理器控制台中
  3. 新迁移已添加到Migrations文件夹(请参阅下面的代码)

    public partial class AddTestProperty: DbMigration
    {
    public override void Up()
    {
        AddColumn("testdb.TestTable", "Test", c => c.String());
    }
    
    public override void Down()
    {
        DropColumn("testdb.TestTable", "Test");
    }
    }
    
  4. 我的配置如下:

        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            AutomaticMigrationDataLossAllowed = false;
        }
    

    现在,如果我运行我的web服务,该属性将添加到我的TestTable中,但所有表中的所有数据都将被删除。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我的数据从我的数据库中删除的原因是:如果您使用从Azure门户下载的服务项目,您将在App_Start / WebsApiConfig中找到以下代码:

public static class WebApiConfig
{
    public static void Register()
    {
        // Use this class to set configuration options for your mobile service
        ConfigOptions options = new ConfigOptions();

        // Use this class to set WebAPI configuration options
        HttpConfiguration config = ServiceConfig.Initialize(new ConfigBuilder(options));

        Database.SetInitializer(new todoInitializer());
    }
}

public class todoInitializer : ClearDatabaseSchemaIfModelChanges<todoContext>
{
    .....

要在Mobile Services .NET后端启用Code First Migrations,您需要替换Database.SetInitializer(new todoInitializer());有了这个:

    //Database.SetInitializer(new todoInitializer());
    var migrator = new DbMigrator(new Configuration());
    migrator.Update();

这需要以下使用声明:

using System.Data.Entity.Migrations;
using todoService.Migrations;

有关how to enable Code First Migrations on a Mobile Service .NET backend的更多信息。