обновить базу данных с консоли диспетчера пакетов в первой среде кода

Первая среда кода

Я пытаюсь обновить базу данных из консоли диспетчера пакетов. Если мой класс домена изменился, мне нужно сбросить и создать базу данных, вместо того, чтобы отбрасывать базу данных, как я могу обновить базу данных.

Я уже пробовал читать некоторые блоги в Google.

команды

PM> Install-Package EntityFramework
  1. Используя эту команду, я успешно устанавливаю Entity Framework.

     PM> Enable-Migrations
    
  2. С помощью этой команды он создал файл миграции в моем проекте.

     PM> Update-Database
    
  3. Используя эту команду, я могу обновить таблицу, но у меня есть проблема здесь.

ошибка

Укажите флаг -Verbose для просмотра операторов SQL, применяемых к целевой базе данных. System.Data.SqlClient.SqlException(0x80131904): При установлении соединения с SQL Server возникла связанная с сетью или конкретная ошибка экземпляра. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения.

Сомнение здесь

Иногда он может обновляться, если в классе POCO изменяется только одно поле. Например, я обновил большее количество классов домена, как можно обновить базу данных из консоли диспетчера пакетов. Есть идеи?

Ответы

Ответ 1

Строку ConnectionString можно указать через параметр ConnectionString:

Update-Database -ConnectionString "data source=server_name;initial catalog=db_name;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" -ConnectionProviderName "System.Data.SqlClient" -Verbose

Также вам нужно использовать этот параметр с тем же значением для команды Add-Migration:

Add-Migration Version_Name -ConnectionString "data source=server_name;initial catalog=db_name;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" -ConnectionProviderName "System.Data.SqlClient" -Verbose

Ответ 2

Похоже, у вас несколько проблем. Относительно нежелания сбросить и воссоздать базу данных, которая определяется вашим инициализатором базы данных. Если вы хотите использовать миграции, вы меняете его на MigrateDatabaseToLatestVersion. http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm

Во-вторых, неважно, сколько полей вы измените, они будут перенесены в один перенос, основанный на изменениях от последней миграции.

В-третьих, как указывали другие, кажется, что у вас проблема с цепочкой соединений. Хотя вы можете добавить это в дополнение к миграции и обновлению-миграции, я бы, вероятно, исправил его в приложении. Я установил мой в конструкторе моего контекста, который указывает на мой файл конфигурации (web.config для ASP.NET).

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
        : base("MyConnection", throwIfV1Schema: false)
    {
        Database.SetInitializer<ApplicationDbContext>(new MigrateDatabaseToLatestVersion<ApplicationDbContext, MyObjextContextMigration>());
    }
    ...

Ответ 3

я использовал

Enable-Migrations -EnableAutomaticMigrations -Force

тогда

Update-Database

И это перенесло мои изменения (дополнительные столбцы) при сохранении моих тестовых данных. Я думаю, что это самый ленивый вариант при прототипировании.

Ответ 4

Вам необходимо обновить SSDT, перейдите в инструменты> расширение и обновления> обновления> инструменты данных SQL-сервера

Ответ 5

Где поставить строку подключения?

Вам не нужно указывать его с каждой командой в консоли диспетчера пакетов. Вы можете поместить его в appsettings.json в проект, где находится ваш класс DbContext (чтение "из класса DbContext").

{
  "ConnectionStrings": {
    "MyConnectionString": "Server=yourServer;Port=5432;Database=yourDatabase;User Id=yourDatabaseUsername;Password=yourDatabasePassword;"
  }
}

Он будет использоваться для миграции.

Важно: если в вашем решении есть несколько проектов, вы должны выбрать проект в проекте "По умолчанию" -dropdown (в консоли менеджера пакетов), и вы должны указать проект как ваш проект запуска (в обозревателе решений).

В противном случае может возникнуть неправильная установка appsettings.json с неправильной/другой строкой соединения.

Это был мой опыт работы с EF Core 2.1 и, вероятно, относится к другим версиям EF.