Code First Migration удаляет все данные

Я использую Code First Migrations в своем веб-API (бэкенд Mobile Service .NET), и всякий раз, когда моя модель изменяется, все данные удаляются из моей базы данных. Вот что я делаю:

  1. Я добавляю новое свойство в свою модель
  2. Я запускаю «Add-Migration AddTestProperty» в консоли диспетчера пакетов.
  3. Новая миграция добавляется в папку «Миграции» (см. код ниже).

    public partial class AddTestProperty: DbMigration
    {
    public override void Up()
    {
        AddColumn("testdb.TestTable", "Test", c => c.String());
    }
    
    public override void Down()
    {
        DropColumn("testdb.TestTable", "Test");
    }
    }
    

Моя конфигурация выглядит так:

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

Теперь, если я запускаю свой веб-сервис, свойство добавляется в мою TestTable, но все данные во всех моих таблицах удаляются. Что я делаю не так?


person Niels    schedule 20.11.2014    source источник


Ответы (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>
{
    .....

Чтобы включить Code First Migrations в бэкенде Mobile Services .NET, вам необходимо заменить Database.SetInitializer(new todoInitializer()); с этим:

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

Для этого требуются следующие операторы использования:

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

Дополнительные сведения о как включить миграцию Code First в серверной части Mobile Service .NET.

person Niels    schedule 22.11.2014