Настройка нескольких проектов с ядром EF в отдельном проекте - PullRequest
0 голосов
/ 27 сентября 2018

Как настроить решения с несколькими проектами, один из которых - ASP Web API (задан как стартовый проект), а другой - проект API.Data (просто стандартная библиотека классов).

У меня следующая ошибкапосле запуска Add-Migration:

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

Должен ли я установить Microsoft.EntityFrameworkCore в проекте API.Data или в главном проекте запуска со всеми сборками?

Я установил Microsoft.EntityFrameworkCore и Microsoft.EntityFrameworkCore.Design для проекта API.Data, основной проект API установлен в качестве запускаемого проекта.

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

Ваш стартовый проект "API" не ссылается на Microsoft.EntityFrameworkCore.Design.Этот пакет необходим для работы основных инструментов Entity Framework.Убедитесь, что ваш загрузочный проект правильный, установите пакет и попробуйте снова.

Если я изменю стартовый проект на проект API.Data, я получу эту ошибку:

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

Когда я собираю решение I, эти предупреждения о сборке для всех сборок:

 Consider app.config remapping of assembly ...

csproj file:

https://pastebin.com/fG7w81a8

Ответы [ 3 ]

0 голосов
/ 11 июня 2019

In Entity Framework Core 2.2+

В вашем библиотечном проекте, содержащем DBContext, убедитесь, что у вас установлены эти пакеты (ваши версии могут отличаться, также вам может потребоваться изменить SqlServer на любой другойвы используете для вашей БД):

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" />

В моем Startup.cs я также указал Migration Assembly, но я не думаю, что это необходимо:

        services.AddDbContext<MyDataContext>(options =>
        {
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                serverOptions => serverOptions.MigrationsAssembly(typeof(MyDataContext).Assembly.FullName));

Затем вPackage Manager Console, измените каталог на ваш Service / Startup проект, например:

cd .\src\MyProject.Service

Затем, в зависимости от того, что вы хотите сделать, все еще в Package Manager Console:

Добавить миграцию :

dotnet ef migrations add MyMigrationName --startup-project ./ --project ../MyProject.Data/

Обновить базу данных :

dotnet ef database update --startup-project ./ --project ../MyProject.Data/

Создать сценарий (последняя миграция) :

dotnet ef migrations script --startup-project ./ --project ../MyProject.Data/
0 голосов
/ 02 августа 2019

Вы должны использовать .net core cli "dotnte ef migrations add".Это решит это

0 голосов
/ 27 сентября 2018

Если вы используете net core 2.1, вам нужно установить Инструменты командной строки , а затем проверить, можете ли вы сделать dotnet ef.

Если у вас есть сущности в другом проектевам все еще нужно добавить в качестве ссылки основной проект, затем run dotnet ef migrations add из основного проекта, в котором вы определили строки подключения, вы можете добавить -v для запуска в подробном режиме, чтобы вы могли пойматьбольше ошибок.

Например, у нас есть проект vtae.data , у этого проекта есть папка с именем context , где у нас есть два контекста, core иstats, тогда у нас есть проект vtae.api , это приложение ASPNET Core с файлом appsettings.json, который содержит строки подключения и импортирует vtae.data проект, так что для работы с EF мы просто попадаем в папку проекта vtae.api и затем запускаем наши команды, например

dotnet ef migrations add InitialCreate --context CoreContext -v
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...