2017-02-12 2 views
1

Недавно я перенес проект EF7 из DotNet Core 1.0.0 в версию 1.1.0, теперь у меня возникли проблемы с созданием миграции базы данных.Генератор миграции EF7 игнорирует параметр контекста

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

Когда я пытаюсь создать миграции для контекста «AuditLogContext» с помощью команды

dotnet ef migrations add Initial --context 'Some.Namespace.AuditLogContext' --output-dir './Migrations/AuditLogMigrations' 

то он терпит неудачу, говоря мне

Название «Initial» используется существующей миграции ,

, когда я пытаюсь создать миграцию с другим именем, скажем Initial2, миграция получить создан, но для неправильного контекста.

В папке

./Migrations/AuditLogMigrations

новые файлы с именем

20170212122451_Initial2.cs

20170212122451_Initial2.Designer.cs

CoreContextModelSnapshot.cs

Я ожидаю, что файл AuditLogContextModelSnapshot.cs вместо.

Неужели кто-то решил эту проблему раньше?

ответ

0

Я нашел причину этой проблемы.

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

В моем случае один класс, реализующий все заводы, теперь есть ошибка, что конкретный порядок интерфейсов используется для определения того, какие миграции созданы.

public class Program : IDbContextFactory<CoreContext>, IDbContextFactory<AuditLogContext>, IDbContextFactory<LockContext> 

Этот фрагмент кода создает миграции для CoreContext

public class Program : IDbContextFactory<AuditLogContext>, IDbContextFactory<CoreContext>,IDbContextFactory<LockContext> 

и фрагмент кода создаст миграции для AuditLogContext.

Это немного раздражает, но если вы знаете, как создать миграцию, все в порядке.

Смежные вопросы