Попытка настроить ядро 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

Я получил эту ошибку:

Startup project 'projectName' нацеливает инфраструктуру ".NETStandard". Не существует среды выполнения, связанной с этой средой, и проекты, нацеленные на нее, не могут выполняться напрямую. Чтобы использовать Консольные инструменты диспетчера основных компонентов Entity Framework с этим проектом, добавьте исполняемый проект, ориентированный на.NET Framework или.NET Core, который ссылается на этот проект и задает его как проект запуска; или обновить этот проект для перекрестной целевой платформы.NET Framework или.NET Core.

Я задаюсь вопросом, могу ли я настроить свою сущность в.NET Standard или если есть лучшая практика, которую я должен делать вместо этого?

Ответы

Ответ 1

  Запускаемый проект 'projectName' предназначен для фреймворка '.NETStandard'. С этой платформой не связано время выполнения, и проекты, нацеленные на нее, не могут быть выполнены напрямую. Чтобы использовать инструменты консоли диспетчера пакетов Entity Framework Core с этим проектом, добавьте исполняемый проект, ориентированный на .NET Framework или .NET Core, который ссылается на этот проект, и установите его в качестве запускаемого проекта; или обновите этот проект для перекрестной нацеливания .NET Framework или .NET Core.

Сообщение об ошибке означает следующее: исполняемый файл.NET Standard не существует. Для него нет времени выполнения, потому что это просто механизм пересылки типов для нескольких различных сред выполнения.

С точки зрения программирования это немного похоже на попытку создания интерфейса. Вы не можете сделать это, потому что нет реализации для запуска.

Решение состоит в том, чтобы выбрать исполняемую платформу для вашего приложения для запуска. Вы можете ссылаться на любое количество стандартных библиотек .NET из своего исполняемого файла (если они совместимы с вашей средой выполнения), но сам исполняемый файл не может быть запущен в .NET Standard. Для выполнения он должен быть нацелен на платформу, такую как .NET Framework или .NET Core.

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

Вы можете сделать это, запустив вашу команду на CLI с опцией --startup-проект = [Path_to_your_main_Project]

Ответ 2

Первый ответ здесь. Я тоже пытаюсь это сделать. Я получил Scaffolding, но Net Standard, похоже, не загружает расширения для свойств таблицы.

Убедитесь, что вы установите пакет EntityFrameworkCore.Tools для EF. Вам нужна только поддержка 4.6.1, которая по умолчанию. Если я выясню, как исправить проблему с расширениями, я отправлю сюда.

Эти два требования. Install-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.Tools

Ответ 3

  1. Щелкните правой кнопкой мыши приложение .NET Core в своем проекте.

  2. Нажатие "Установить как стартовый проект"

Ответ 4

Следующее работает от 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#other-target-frameworks