Попытка настроить ядро Entity Framework в проекте.Net Standard
Мне было интересно, смогу ли я легко настроить EntityFrameworkCore в проекте.NET Standard 2.0. Я следовал этому уроку, но для этого требуется.NET Core или Framework.
Когда я добрался до этого шага:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Я получил эту ошибку:
Запускаемый проект 'projectName' предназначен для фреймворка '.NETStandard'. С этой платформой не связано время выполнения, и проекты, нацеленные на нее, не могут быть выполнены напрямую. Чтобы использовать инструменты консоли диспетчера пакетов Entity Framework Core с этим проектом, добавьте исполняемый проект, ориентированный на.NET Framework или.NET Core, который ссылается на этот проект, и установите его в качестве запускаемого проекта; или обновите этот проект для перекрестной нацеливания.NET Framework или.NET Core.
Мне интересно, могу ли я настроить свою сущность в.NET Standard или есть ли лучший метод, который я должен использовать вместо этого?
8 ответов
Запускаемый проект 'projectName' предназначен для фреймворка '.NETStandard'. С этой платформой не связано время выполнения, и проекты, нацеленные на нее, не могут быть выполнены напрямую. Чтобы использовать инструменты консоли диспетчера пакетов Entity Framework Core с этим проектом, добавьте исполняемый проект, ориентированный на.NET Framework или.NET Core, который ссылается на этот проект, и установите его в качестве запускаемого проекта; или обновите этот проект для перекрестной нацеливания.NET Framework или.NET Core.
Сообщение об ошибке означает следующее: исполняемого проекта.NET Standard не существует. Для него нет времени выполнения, потому что это просто механизм пересылки типов для нескольких разных сред выполнения.
С точки зрения программирования это немного похоже на попытку создания интерфейса. Вы не можете сделать это, потому что нет реализации для запуска.
Решение состоит в том, чтобы выбрать исполняемую платформу для вашего приложения. Вы можете ссылаться на столько библиотек.NET Standard, сколько захотите, из своего execuable (если они совместимы с вашей средой выполнения), но сам исполняемый файл не может быть запущен в.NET Standard. Это должно предназначаться для платформы, такой как.NET Framework или.NET Core для выполнения.
Другими словами, чтобы использовать команду для создания вашей базы данных, вы должны указать время выполнения. Поэтому вам нужно будет либо запустить эту команду, ориентируясь на ваш основной исполняемый проект, либо добавить новый исполняемый проект в свое решение, чтобы запустить его.
Щелкните правой кнопкой мыши приложение.NET Core в своем проекте.
Нажатие "Установить как стартовый проект"
Вы можете запустить
dotnet ef migrations
против проектов.NET Standard, создав проект.NET Core, добавив свой проект.NET Standard в качестве ссылки, а затем используя
--project
и
--startup-project
чтобы указать, для какого проекта запускать миграции.
dotnet ef migrations add MyNewMigrationName --project [pathToNetStandardProject] --startup-project [pathToNetCoreProject]
Проблема здесь в этой конкретной строке в вашем файле.csproj.
<TargetFramework>netstandard2.0</TargetFramework>
измените это на
<TargetFramework>netcoreapp2.1</TargetFramework>
или какая бы ни была версия ядра.net, на которую нацелен ваш основной проект, это сработало для меня, это должно сработать и для вас!:)
Первый ответ здесь. Я на самом деле пытаюсь сделать это тоже. Я получил Scaffolding, но Net Standard, похоже, не загружает расширения для свойств таблицы.
Убедитесь, что вы установили пакет EntityFrameworkCore.Tools для EF. Вам нужна только поддержка 4.6.1, которая используется по умолчанию. Если я выясню, как решить проблему с расширениями, я выложу здесь.
Эти два необходимы. Пакет установки Microsoft.EntityFrameworkCore.SqlServer Пакет установки Microsoft.EntityFrameworkCore.Tools
Я тоже поделюсь своим опытом, может это сэкономит время другим.
В моем случае я установил несколько проектов в качестве стартовых проектов , запуск миграции дал мне эту ошибку, о которой говорится в вопросах.
РЕШЕНИЕ:
Я изменил несколько запускаемых проектов на один проект , и миграция прошла успешно!
Шаг 1:
Добавьте ProjectReference в свой проект.netstandar".
Шаг 2:
Вы можете использовать параметр -Project "ваш проект.netstandar".
Следующее работает от CLI dotnet, предполагая, что у вас уже есть исполняемый запускаемый проект в решении:
dotnet ef dbcontext scaffold "Server=myServerName; Database=dbName; User Id=someUser; Password=myPassword123;" Microsoft.EntityFrameworkCore.SqlServer --project ../MyLibraryProject/ -c MyDbContext -o FolderName
Вы можете найти больше информации здесь:
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet