обновить базу данных с консоли диспетчера пакетов в первой среде кода
Первая среда кода
Я пытаюсь обновить базу данных из консоли диспетчера пакетов. Если мой класс домена изменился, мне нужно сбросить и создать базу данных, вместо того, чтобы отбрасывать базу данных, как я могу обновить базу данных.
Я уже пробовал читать некоторые блоги в Google.
команды
PM> Install-Package EntityFramework
-
Используя эту команду, я успешно устанавливаю Entity Framework.
PM> Enable-Migrations
-
С помощью этой команды он создал файл миграции в моем проекте.
PM> Update-Database
-
Используя эту команду, я могу обновить таблицу, но у меня есть проблема здесь.
ошибка
Укажите флаг -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.