如果没有以下前两行,电子邮件就会保存到数据库中。
但是,当我使用SendGrid的lib发送电子邮件时,当存储库尝试保存它时会抛出异常,因为已经处理了Context。
System.ObjectDisposedException
除非库以某种方式错误处理线程或其他类似内容,否则对我来说没有任何意义。
var response = await this._emailSender.SendEmailAsync(email);
email.ResponseStatusCode = (int)response.StatusCode;
this._emailRepository.Save(email);
我的解决方法是创建一个新的上下文:
var context = new ApplicationDbContext(this._options, this._applicationUserProvider);
context.Add(email);
context.SaveChanges();
有更好的方法可以解决这个问题吗?
答案 0 :(得分:2)
除非库以某种方式错误处理线程或其他类似的东西。
这是一种异步方法。 await
之后的行可能稍后在不同的线程上运行。
要查看的地方是在调用代码中。如果您调用包含此行的方法并且不等待/等待返回的任务,则调用代码可以在电子邮件发送任务仍在运行时处理您的DbContext。