invocation.Method, out var unitOfWorkAttribute))
{
invocation.Proceed();
return;
}
// 我在这里...
using (var uow = _unitOfWorkManager.Begin(CreateOptions(invocation, unitOfWorkAttribute)))
{
invocation.Proceed();
uow.Complete();
}
}
要验证 DbContext 是随工作单元一起释放,也十分简单,编写以下代码即可进行测试。
[Fact]
public void TestMethod()
{
var rep = GetRequiredService<IHospitalRepository>();
var mgr = GetRequiredService<IUnitOfWorkManager>();
using (var uow = mgr.Begin())
{
var count = rep.Count();
uow.Dispose();
uow.Complete();
}
}
三、解决
解决方法很简单,在有类似操作的外部通过 [UnitOfWork]
特性或者 IUnitOfManager.Begin
开启一个新的工作单元即可。
[Fact]
public void TestMethod()
{
var rep = GetRequiredService<IHospitalRepository>();
var mgr = GetRequiredService<IUnitOfWorkManager>();
using (var uow = mgr.Begin())
{
var count = rep.Count();
uow.Complete();
}
}