Я потерял все данные в моих таблицах, когда я обновляю свои модели - PullRequest
0 голосов
/ 17 ноября 2011

Я использую EF Code First в своем решении с SQL Server Express за ним.Когда я обновляю свою модель, мне всегда приходится удалять базу данных перед перезапуском решения.Я знаю, что это потому, что моя база данных больше не актуальна.В этом случае я теряю все данные в своих таблицах.

Я хотел бы иметь возможность обновлять свои модели (например, добавляя новое поле) и сохранять все данные в своих таблицах.

Даже если я обновляю свою базу данных вручную, при перезапуске решения я получаю следующую ошибку:

Модель, поддерживающая контекст EntityFrameworkDbContext, изменилась с момента создания базы данных.Либо удалите / обновите базу данных вручную, либо вызовите Database.SetInitializer с экземпляром IDatabaseInitializer

Есть предложения?

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Вы можете удалить создание таблицы EdmMetadata следующим образом.

public class MyContext : DbContext
{

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    }
}

Таким образом, вы можете обновить базу данных вручную без получения ошибки.

Вы можете проверить КодПервые миграции

0 голосов
/ 17 ноября 2011

Чтобы немного расширить мой комментарий.Как правило, это невозможно, и CF не предназначен для этого.Единственный способ обойти это вручную обновить таблицы с помощью команд SQL И обновить хэш проверки модели базы данных, сохраненный как EDMmetadata или что-то подобное в вашей базе данных, прежде чем вы обновите первую модель кода.

Чтобы получить правильное значение хеш-функции, вы можете создать временную базу данных и просто скопировать свое значение оттуда.

Не красиво, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...