У меня есть объект DBContext, который содержит определения всех моих объектов базы данных. Когда я запускал приложение в первый раз, он создал базу данных. Это сейчас в производстве.Первая миграция кода не найдена в базе данных
Теперь мне нужно было внести изменения модели в DEV, и поэтому мне нужно будет использовать First First Migrations для генерации SQL-скрипта, который делает необходимые изменения схемы в prod при отпускании.
Как я понял, я мог бы добавить новую миграцию с помощью команды add-migration, и это будет сравнивать то, что находится в моей существующей базе данных с определением модели, и сгенерировать для меня сценарий, который позволит мне обновлять базу данных. Однако, когда я запускаю команду add-migration, она создает для меня миграцию, которая представляет собой полную базу данных, а не просто новые объекты.
Мои объекты базы данных находятся в отдельной библиотеке классов, я открыл консоль диспетчера пакетов, выбрал проект по умолчанию для моей библиотеки классов DB.
Под Configuration.cs я имею
internal sealed class Configuration : DbMigrationsConfiguration<Centrica.EMT.Database.Context.EmtDataContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
ContextKey = "Centrica.EMT.Database.Context.EmtDataContext";
}
И в app.config этой библиотеки классов У меня есть
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<connectionStrings>
<add name="Centrica.EMT.Database.Context.EMTDataContext" connectionString="Initial Catalog=EMTProd;Data Source=WYCVWWEBD016\COMPUTECLUSTER;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
но это, кажется, не найти эту базу данных и генерировать обновления сценарий, он просто создает совершенно новый полный сценарий создания базы данных для меня, когда я создаю новую миграцию.
Я не могу создать сценарий обновления? Должен ли я иметь существующую миграцию, выполненную первоначально в качестве базовой линии? Я настроил это неправильно для того, чтобы найти существующую базу данных?
Обновлено
public class EmtDataContext : DbContext
{
public EmtDataContext()
{
//todoSystem.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<EmtDataContext>());
var objectContextAdapter = this as IObjectContextAdapter;
var objectContext = objectContextAdapter.ObjectContext;
objectContext.CommandTimeout = Database.Connection.ConnectionTimeout;
}
Я думаю, здесь есть небольшое недоразумение. Когда вы впервые включаете перенос, самый первый сценарий миграции действительно заполнен созданием таблицы. Только после того, как вы потом что-то измените и запустите add-migrations, вы получите еще один сценарий миграции, описывающий дельта. У меня есть аналогичная настройка, и у меня есть файл с именем _InitialCreate.cs, который действительно заполнен CreateTable() –
А я вижу. Я просто запустил приложение и установил инициализатор в CreateDatabaseIfNotExists. Есть ли какой-либо способ, когда я могу использовать миграцию, учитывая, что я не создал существующий? – NZJames
Да. Вы можете использовать MigrateDatabaseToLatestVersion, что и должно быть запущено в процессе производства –