.net core 上下文被释放到服务中
尝试将上下文用于自定义服务时出现以下错误: System.ObjectDisposedException:'无法访问已处置的对象。此错误的一个常见原因是处理通过依赖项注入解析的上下文,然后在应用程序的其他位置尝试使用相同的上下文实例。如果对上下文调用Dispose()或包装上下文,可能会发生这种情况 我的代码由一个控制器和一个服务组成。 我的控制器的(简化)代码为:.net core 上下文被释放到服务中,.net-core,entity-framework-core,.net Core,Entity Framework Core,尝试将上下文用于自定义服务时出现以下错误: System.ObjectDisposedException:'无法访问已处置的对象。此错误的一个常见原因是处理通过依赖项注入解析的上下文,然后在应用程序的其他位置尝试使用相同的上下文实例。如果对上下文调用Dispose()或包装上下文,可能会发生这种情况 我的代码由一个控制器和一个服务组成。 我的控制器的(简化)代码为: public class IcsController : Controller { public string curre
public class IcsController : Controller
{
public string current_Directory = System.IO.Directory.GetCurrentDirectory();
//Importation du context (BDD)
private readonly Sync4All_AngularContext _context;
private readonly UserManager<User> _userManager;
public readonly OverbookingsManager _overbookingsManager;
private IIcsService _icsService;
public IcsController(Sync4All_AngularContext context, UserManager<User> userManager, IIcsService icsService, OverbookingsManager overbookingsManager)
{
_context = context;
_userManager = userManager;
_icsService = icsService;
_overbookingsManager = overbookingsManager;
}
//---------------------------------Telechargement et Update de tous les ICALS-----------------------------------
[HttpGet]
public ActionResult DownloadAndUpdate()
{
_overbookingsManager.SendEmailsOverbookings();
return Ok();
}
}
公共类IcsController:控制器
{
公共字符串current_Directory=System.IO.Directory.GetCurrentDirectory();
//上下文输入(BDD)
私有只读Sync4All\u AngularContext\u context;
私有只读用户管理器_UserManager;
公共只读OverbookingsManager(U OverbookingsManager);
私人IIcsService(ICSU icsService);
公共IcsController(Sync4All_AngularContext、UserManager UserManager、IIcsService icsService、OverbookingsManager OverbookingsManager)
{
_上下文=上下文;
_userManager=userManager;
_icsService=icsService;
_overbookingsManager=overbookingsManager;
}
//---------------------------------使用ICALS的远程充电和更新-----------------------------------
[HttpGet]
公共操作结果下载和更新()
{
_overbookingsManager.SendEmailsOverbookings();
返回Ok();
}
}
服务的定义如下所示:配置服务
services.AddScoped<OverbookingsManager>();
services.addScope();
服务代码如下:
public class OverbookingsManager
{
private readonly Sync4All_AngularContext _context;
public OverbookingsManager(Sync4All_AngularContext context)
{
_context = context;
}
public async void SendEmailsOverbookings()
{
List<Overbookings> overbookinsList = await _context.Overbookings.Where(m => DateTime.Compare(m.DtEmailSent, DateTime.Today.AddDays(-7)) < 0).ToListAsync(); //This is where i got the error of context disposed
//blabla rest of my code
}
}
公共类超售管理器
{
私有只读Sync4All\u AngularContext\u context;
公共超售管理器(Sync4All\u AngularContext)
{
_上下文=上下文;
}
公共异步void sendmailsoverbookings()
{
List overbookinsList=await _context.Overbookings.Where(m=>DateTime.Compare(m.DtEmailSent,DateTime.todays.AddDays(-7))<0.ToListSync();//这就是我处理上下文错误的地方
//布拉布拉我的代码的其余部分
}
}
当我在控制器上执行get请求时,它调用methode DownloadAndUpdate(),该方法使用该服务
我的控制器和服务的其他方法使用_context,但我从不使用_context.dispose()
我不明白这个问题,你能帮忙吗
谢谢问题是无效的:
public async void SendEmailsOverbookings()
将其替换为任务:
public async Task SendEmailsOverbookings()
有关一些解释,请参阅:
对于不返回值的事件处理程序以外的方法,可以
应该返回一个任务,因为
空虚是不能等待的
问题在于:
public async void SendEmailsOverbookings()
将其替换为任务:
public async Task SendEmailsOverbookings()
有关一些解释,请参阅:
对于不返回值的事件处理程序以外的方法,可以
应该返回一个任务,因为
空虚是不能等待的
谢谢,这就是问题所在。调用函数时也需要等待。谢谢,这就是问题所在。调用函数时也需要等待。