Невозможно добавить миграции EF 6.4 в проект. Net Standard 2.1 - PullRequest
1 голос
/ 17 апреля 2020

Мы находимся на последних этапах переноса огромного решения на. Net Core (с 4.7.2), но мы еще не готовы к переходу на Entity Framework Core, так как мы используем таблицу иерархии для каждого типа и т. д. c. Мы используем EF code-first. Итак, проект, содержащий наши миграции DbContext и EF, теперь работает с .netstandard2.1 и ссылается на EF 6.4 (который, по-видимому, начиная с v6.3 поддерживает ядро ​​net). Я понимаю, что инструменты EF изменились с v6.2 -> v6.4, поэтому наш традиционный способ создания EF-миграции теперь приводит к следующей ошибке в консоли диспетчера пакетов:

add -igration ТЕСТ -проектные данные

Проект "Данные" предназначен для платформы .NETStandard. Инструменты консоли диспетчера пакетов Entity Framework не поддерживают эту платформу.

После некоторого исследования я наткнулся на это , что говорит о том, что вам необходимо использовать. Net Основная сборка как фиктивный стартовый проект. После создания проекта консольного приложения .netcore 3.1 (называемого Data_Startup, который ссылается на проект Data) и небольшого изменения моей команды я теперь получаю следующую ошибку:

do tnet ef migrations add TEST - -project Data --startup-project Data_Startup - c CustomContext

Не найден DbContext с именем 'CustomContext'.

Это выглядит как минимум попытки миграции, но я сейчас застрял. Я попытался полностью квалифицировать DbContext с пространством имен и добавить класс DBContext в качестве «связанного файла» в новый фиктивный проект, но я столкнулся с той же ошибкой.

Я также пытался используйте инструмент EF 6.4: do tnet C: \ Users \ xxxx.nuget \ packages \ entityframework \ 6.4.0 \ tools \ netcoreapp3.0 \ any \ ef6.dll "миграции добавить TEST --assembly Данные

Ваш целевой проект «Данные» не ссылается на EntityFramework. Этот пакет необходим для работы основных инструментов Entity Framework. Убедитесь, что целевой проект правильный, установите пакет и попробуйте еще раз.

... несмотря на то, что он определенно установлен в проекте Data!

Что я делаю не так? Какой инструмент мне действительно нужно использовать? Это конфигурация проекта даже возможно?

1 Ответ

0 голосов
/ 21 апреля 2020

Наконец-то взломали его!

Во-первых, кажется, что, несмотря на все, что я прочитал от Microsoft, конфигурация этого проекта не возможна. Я обновил проект Data до netcoreapp3.1 (что означает обновление до любого другого проекта в решении!), В котором устранены ошибки таргетинга и размещения в контексте БД. Я закончил тем, что использовал следующую команду из консоли диспетчера пакетов:

TEST-миграции-добавления -constringString "SERVER = (локальный); DATABASE = xxxx; Интегрированная безопасность = true" -connectionProvider "System.Data .SqlClient "

Интересно, что запуск вышеупомянутого с флагом verbose предполагает, что он фактически выполняет одну из моих первоначально предпринятых команд: do tnet C: \ Users \ xxxx.nuget \ packages \ entityframework \ 6.4.0 \ tools \ netcoreapp3.0 \ any \ ef6.dll миграций добавить команду Test , НО явное выполнение этой точной команды завершается неудачно со знакомой ошибкой

Ваш целевой проект «Данные» не ссылается на EntityFramework. Этот пакет необходим для работы базовых инструментов Entity Framework.

... поэтому я не знаю, почему псевдоним add -igration , кажется, работает!

Кроме того, многие параметры, которые должны работать с инструментом ef 6.4 (перечислены здесь ), на самом деле тоже не работали (например, "--connection-string" на самом деле "-connectionString") ), но, к счастью, приведенная выше команда работает отлично. Короче говоря, документация по инструментам EF 6.4 - полный беспорядок. Надеюсь, что эти выводы пригодятся всем, кто находится в такой же мучительной ситуации.

...