#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.Инфраструктура.DbQuery1.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](IDbAsyncEnumerable1 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. Вот так просто.