我在这个单元测试的最后一行上的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);
我没有收到错误(并且得到我的父记录),但是我似乎没有选择填充我的Payments集合。
我没有故意将DbContext置于任何地方。事实上,据我所知,我唯一能触及的地方是为这两个表添加DbSet,并在OnModelCreating()中建立HasMany关系。
我尝试将[UnitOfWork]添加到测试中,这是我在其他地方找到的唯一建议,但它没有改变行为。
答案 0 :(得分:1)
您可以明确地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]
属性未用于Test方法,因为可能不会注入Test类。