第三方Lib处理上下文

时间:2018-05-03 11:03:05

标签: entity-framework entity-framework-core sendgrid

如果没有以下前两行,电子邮件就会保存到数据库中。

但是,当我使用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();

有更好的方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

  

除非库以某种方式错误处理线程或其他类似的东西。

这是一种异步方法。 await之后的行可能稍后在不同的线程上运行。

要查看的地方是在调用代码中。如果您调用包含此行的方法并且不等待/等待返回的任务,则调用代码可以在电子邮件发送任务仍在运行时处理您的DbContext。