EF Core в библиотеке .NET Core - PullRequest
2 голосов
/ 28 июня 2019

Основная идея - добавить пакет nuget EF Core в проект библиотеки dotnet Core, а затем использовать эту библиотеку в нескольких приложениях (например, ASP.NET Core, Win Service, Console App) без настройки EF в каждом из их. И, по возможности, без добавления пакетов EF к каждому из них. Мне интересно, возможно ли это.

Моя текущая проблема: я не могу создать базу данных на основе модели, которую я имею в проекте библиотеки. Кажется, я не могу просто выбрать проект библиотеки в консоли диспетчера пакетов и запустить update-database. Он хочет, чтобы я реализовал 'IDesignTimeDbContextFactory'. Я использую .Net Core 2.1. Поможет ли мне обновить его до последней версии?

Ответы [ 3 ]

1 голос
/ 29 июня 2019

Да, вы можете сделать это.

Убедитесь, что у вас установлены все необходимые компоненты.

  1. Создать консольное приложение .NET Core
  2. Создать ядроБиблиотека классов для Entity Framework
  3. Ссылка на библиотеку классов из консольного приложения
  4. Создайте базу данных, перейдите в Инструменты> Консоль диспетчера пакетов
  5. В раскрывающемся списке установите для проекта по умолчанию значениеваша библиотека классов, так что она будет там скаффолдом.
  6. Запустите это в консоли (сначала подход с базой данных): Scaffold-DbContext "Ваша соединительная строка здесь" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models / EF -f
  7. Создайте класс, чтобы получить ваш контекст
public class Context
    {
// See all queries generated by EF in debug window
        public static readonly LoggerFactory MyLoggerFactory
            = new LoggerFactory(new[] { new DebugLoggerProvider((s, level) => level >= LogLevel.Trace) });
        public static DF.Data.Models.EF.YourContext GetContext()
        {
            var optionsBuilder = new DbContextOptionsBuilder<DF.Data.Models.EF.YourContext>();
            optionsBuilder.UseSqlServer(
                "Your Connection String").UseLoggerFactory(MyLoggerFactory);
            return new DF.Data.Models.EF.YourContext(optionsBuilder.Options);
        }

        public partial class YourContext : DbContext
        {
            public YourContext(DbContextOptions optionsBuilderOptions) : base(optionsBuilderOptions)
            {
            }
        }
    }
Создайте класс репозитория для хранения ваших запросов, если хотите.

Примечание. При повторной сборке базы данных в раскрывающемся списке выберите проект библиотеки классов в качестве проекта по умолчанию.Затем установите другой проект обратно в автозагрузку проекта.

1 голос
/ 28 июня 2019

Как указано в сообщении об ошибке, вам необходимо реализовать IDesignTimeDbContextFactory, который является частью пакета Microsoft.EntityFrameworkCore.Design, поэтому установите его в своей библиотеке. Затем создайте класс, который соответственно реализует IDesignTimeDbContextFactory.

Поскольку вы создали библиотеку .NET Core, установите ее в качестве стартового проекта.

Затем в консоли диспетчера пакетов выберите свою библиотеку в качестве проекта по умолчанию и выполните update-database.

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

В кратком ответе, да, вы можете сделать это.Вы можете проследить среднюю историю под названием « .NET Core - Использование Entity Framework Core в отдельном проекте ».Рассказ представляет собой хорошее и подробное представление примера приложения, которое разделяет решение .NET Core на три отдельных проекта: проект бизнес-логики, проект уровня доступа к данным и проект веб-API.

Автор Родриго Сантос , который является разработчиком полного стека и энтузиастом NET Core.Будь свободен следить за его работой, как я делал в прошлом.Это может помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...