Code First Migration изтрива всички данни

Използвам Code First Migrations в моя Web API (Mobile Service .NET backend) и всеки път, когато моят модел се промени, всички данни се изтриват от моята база данни. Ето какво правя:

  1. Добавям ново свойство към моя модел
  2. Пускам "Add-Migration AddTestProperty" в конзолата на Package Manager
  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 Migrations на мобилна услуга .NET бекенд.

person Niels    schedule 22.11.2014