Справочная библиотека классов (TF .NetFramework 4.6.1, которая предназначена для уровня репозитория ) в проекте .Net5

#c# #.net-5 #data-access-layer #class-library #.net-framework-version

Вопрос:

Я работаю над старым проектом, который выполнен в .NET Framework 4.6.1, и в нем есть библиотека классов в качестве уровня репозитория (также целевой платформой является .NET Framework 4.6.1).

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

В новом проекте API .Net5 я без каких-либо проблем ссылался на старые библиотеки классов.

В файле Startup.cs я установил:

 services.AddScopedlt;IJobService, JobServicegt;();  

В конструкторе контроллера:

 private readonly IJobService _jobservice;   public TestController(IJobService jobservice)  {  _jobservice = jobservice;  }  

и действия:

 [HttpGet]  [Route("GetJobs")]  public async Tasklt;IActionResultgt; getJobs()  {  var jobs = await _jobservice.Get();   return Ok(jobs);  }  

Когда я иду на действие с почтальоном, он возвращает это:

Система.Исключение InvalidOperationException: В файле конфигурации приложения не удалось найти строку подключения с именем «DefaultConnection».
в System.Data.Entity.Внутренний.LazyInternalConnection.get_ConnectionHasModel()
в System.Data.Entity.Внутренний.Ленивый международный контекст.Инициализируйте контекст()
в System.Data.Entity.Внутренний.Внутренний контекст.Инициализировать()
в System.Data.Entity.Внутренний.Внутренний контекст.getentitysetandbasetypeтип(Тип объекта)
в System.Data.Entity.Внутренний.Linq.Внутренний 1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet набор 1.GetAsyncEnumerator()
в System.Data.Entity.Инфраструктура.DbQuery 1.System.Data.Entity.Infrastructure.IDbAsyncEnumerablelt;TResultgt;.GetAsyncEnumerator() at System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.ForEachAsync[T](IDbAsyncEnumerable 1 источник, Действие 1 action, CancellationToken cancellationToken) at System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.ToListAsync[T](IDbAsyncEnumerable 1 источник, Отмена (Отмена))
в System.Data.Entity.Инфраструктура.idbasyncenumerable расширения.ToListAsync[T](IDbAsyncEnumerable 1 source) at System.Data.Entity.QueryableExtensions.ToListAsync[TSource](IQueryable 1 источник)

Подключение по умолчанию установлено в файле App.config старой библиотеки классов

 lt;add name="DefaultConnection" providerName="System.Data.SqlClient"  connectionString="Data Source=DESKTOP-GGQ984RSQLEXPRESS; Initial Catalog=TestDB; Integrated Security=SSPI; MultipleActiveResultsets=True;"/gt;  

Я хочу упомянуть, что я сделал тот же API в старом проекте API и использую тот же сервис, и он отлично работает.

Я не могу понять, почему в нем написано «В файле конфигурации приложения не найдена строка подключения с именем DefaultConnection»?

Комментарии:

1. попробуйте перенести старую библиотеку на стандарт .net.

2. @DanielA. Уайт, пожалуйста, не могли бы вы уточнить, как это сделать? Вы имеете в виду создание новой библиотеки классов .NET Standard 2.0, которая будет ссылаться на проект .NET5, а также в том классе, на который будет ссылаться старый . Сетевая работа 4.6.1 Библиотека классов?

3. Если вам нужно совместно использовать код в .NET Framework и .NET Core (или 5/6), то этот код должен находиться в стандартной библиотеке классов .NET. Вот так просто.