为什么要处置我的 DbContext?我怎样才能阻止它或解决它?
Why is my DbContext being disposed? How can I stop it or work around it?
在此单元测试的最后一行,我的 dbContext 对象出现 ObjectDisposedException:
public class InvoiceRepository_Tests : AppTestBase
{
[Fact]
public async Task Test_InsertAndQuery()
{
var invoiceRepository = Resolve<IRepository<InvoiceHistory, long>>();
var invoice = new InvoiceHistory() { Reference = "1", Payments = new List<Payment> { new Payment() } };
var ihId = await invoiceRepository.InsertAndGetIdAsync(invoice);
var readInvoice = await invoiceRepository
.Query(q => q.Where(ih => ih.Id == ihId))
.Include(ih => ih.Payments)
.FirstOrDefaultAsync();
}
}
如果我将最后一行替换为:
var readInvoice = invoiceRepository.Get(ihId);
我没有收到错误消息(并且确实收到了我的父记录),但我似乎无法填充我的付款集合。
我不是故意在任何地方处理 DbContext。事实上,据我所知,我唯一接触过的地方是为这两个表添加 DbSet 并在 OnModelCreating() 中建立 HasMany 关系。
我已经尝试将 [UnitOfWork] 添加到测试中,这是我在其他地方可以找到的唯一建议,但它并没有改变行为。
您可以 Begin
UnitOfWork
显式:
[Fact]
public async Task Test_InsertAndQuery()
{
var invoiceRepository = Resolve<IRepository<InvoiceHistory, long>>();
var unitOfWorkManager = Resolve<IUnitOfWorkManager>();
using (var uow = unitOfWorkManager.Begin())
{
var invoice = new InvoiceHistory() { Reference = "1", Payments = new List<Payment> { new Payment() } };
var ihId = await invoiceRepository.InsertAndGetIdAsync(invoice);
var readInvoice = await invoiceRepository
.Query(q => q.Where(ih => ih.Id == ihId))
.Include(ih => ih.Payments)
.FirstOrDefaultAsync();
// ...
await uow.CompleteAsync();
}
}
[UnitOfWork]
属性未用于测试方法,因为可能无法注入测试 class。
在此单元测试的最后一行,我的 dbContext 对象出现 ObjectDisposedException:
public class InvoiceRepository_Tests : AppTestBase
{
[Fact]
public async Task Test_InsertAndQuery()
{
var invoiceRepository = Resolve<IRepository<InvoiceHistory, long>>();
var invoice = new InvoiceHistory() { Reference = "1", Payments = new List<Payment> { new Payment() } };
var ihId = await invoiceRepository.InsertAndGetIdAsync(invoice);
var readInvoice = await invoiceRepository
.Query(q => q.Where(ih => ih.Id == ihId))
.Include(ih => ih.Payments)
.FirstOrDefaultAsync();
}
}
如果我将最后一行替换为:
var readInvoice = invoiceRepository.Get(ihId);
我没有收到错误消息(并且确实收到了我的父记录),但我似乎无法填充我的付款集合。
我不是故意在任何地方处理 DbContext。事实上,据我所知,我唯一接触过的地方是为这两个表添加 DbSet 并在 OnModelCreating() 中建立 HasMany 关系。
我已经尝试将 [UnitOfWork] 添加到测试中,这是我在其他地方可以找到的唯一建议,但它并没有改变行为。
您可以 Begin
UnitOfWork
显式:
[Fact]
public async Task Test_InsertAndQuery()
{
var invoiceRepository = Resolve<IRepository<InvoiceHistory, long>>();
var unitOfWorkManager = Resolve<IUnitOfWorkManager>();
using (var uow = unitOfWorkManager.Begin())
{
var invoice = new InvoiceHistory() { Reference = "1", Payments = new List<Payment> { new Payment() } };
var ihId = await invoiceRepository.InsertAndGetIdAsync(invoice);
var readInvoice = await invoiceRepository
.Query(q => q.Where(ih => ih.Id == ihId))
.Include(ih => ih.Payments)
.FirstOrDefaultAsync();
// ...
await uow.CompleteAsync();
}
}
[UnitOfWork]
属性未用于测试方法,因为可能无法注入测试 class。