1

Я создаю приложение MVC, где я очень часто добавляю новые классы. Поскольку классы связаны друг с другом, и тестовые данные в уже созданных таблицах не представляют интереса, я предпочитаю работать с AutomaticMigrations.Включить автоматические миграции в mvc

Я использую следующую команду для установки базы данных в исходное состояние.

Update-Database –TargetMigration: $InitialDatabase 

Но проблема в том, что он не работает всегда. Каковы могут быть причины, по которым это происходит неправильно? Я не знаком с First First Migrations.

Ошибка была в основном вызвана во время выполнения, указав, что DbContext был изменен. Я уверен, что нет никаких зависимостей в существующих таблицах с потерянными таблицами перед включением Migrations. Я также получаю сообщение об ошибке

Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong. 

Я ищу общую помощь по этой теме.

ответ

4

Для автоматической миграции первых вы должны установить базу Initializer в вашем контексте базы данных конструктора.

public class YourDBContext: DbContext 
{   
    public YourDBContext(): base("ConnectionString") 
    { 
     Database.SetInitializer<YourDBContext>(new CreateDatabaseIfNotExists<YourDBContext>()); 
    } 

Вы также можете создавать собственные базы данных инициализатору реализующий CreateDatabaseIfNotExists<YourDBContext> с перегруженным методом семян для обеспечения исходных данных.

Во-вторых, вы должны включить автоматическую миграцию с помощью команды в Package Manager Console Enable-Migrations -EnableAutomaticMigrations

Затем с помощью команды Update-Database в Package Manager Console будет применяться к базе данных все ожидающие изменения, которые были сделаны после последнего переноса.

Update: Использование Verbose с помощью команды обновления базы данных, чтобы увидеть, что скрипт генерируется

Update-Database –Verbose 
+0

, когда я добавляю параметры в SetInitializer, он не работает. – Vini

+0

Я уверен, что вы перенесете миграцию '$ InitialDatabase' в свой каталог миграции! верный!! –

+0

У меня нет таблицы для Migrations в моей базе данных. Просто сейчас я проверил, чтобы найти ее там нет. – Vini

1

Если вы хотите получить общую помощь, я думаю, что Microsoft documentation довольно хорош для стартеров. У них также есть хорошие учебные пособия, которые помогут вам начать правильно с самого начала.

В отношении вашей текущей проблемы вы могли бы подробно остановиться на конкретной проблеме? Сообщение об ошибке показывает, что вам нужно будет исправить себя, и это не обязательно проблема с EF.

Update:

Изменить конструктор пользовательского DbContext с следующей строкой:

Database.SetInitializer<MyDbContext>(null); 
+0

У меня был класс модели и программа работает правильно, прежде чем добавить больше классов. Теперь я удалил классы, которые я добавил, но код больше не работает. я обычно отправляюсь на AutomaticMigrations и позволяю потерять данные, чтобы удалить таблицы базы данных и создать их снова. но на этот раз мне это не удается. – Vini

+0

Ссылка, которую вы опубликовали, - это место, где я получил все ключевые слова для автоматической миграции. Но он не имеет ничего, чтобы установить базу данных в ее интуитивное состояние. – Vini

+0

Вы имеете в виду эту строку кода, я полагаю: Database.SetInitializer (null); – hbulens

1

Вы должны использовать DropCreateDatabaseIfModelChanges, если вы всегда хотите, чтобы воссоздать дб, а не ориентации на initialdatabase миграции. Еще по теме на asp.net website В конструкторе вашего контекста в, например

public class SchoolDBContext: DbContext 
    {   
     public SchoolDBContext(): base("SchoolDBConnectionString") 
     { 
     Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseIfModelChanges<SchoolDBContext>()); 
     } 
+0

Где находится эта строка кода? Я пытаюсь добавить его в global.asax, но он вызывает ошибки. – Vini

+0

Я добавил его в миграции. Тем не менее это сработало. Так в чем же отличие, когда я добавляю его в config.cs в migrations и datacontext? – Vini

+0

'Исключение типа 'System.NotSupportedException' произошло в EntityFramework.dll, но не было обработано в коде пользователя Дополнительная информация: Совместимость модели не может быть проверена, поскольку база данных не содержит метаданных модели. Совместимость модели может быть проверена только для баз данных, созданных с использованием First Code или First First Code. 'Я получаю эту ошибку, когда я добавил ее в свой' DbContext' – Vini