我正在尝试在多个存储库中共享一个带有 4 个 DbSet 的简单 DbContext,我的每个存储库都继承自这个基类
public class CodeFirstRepository : IDisposable
{
private static MyContext _ctx = new MyContext();
protected MyContext Context
{
get { return _ctx; }
}
public void Dispose()
{
if (Context != null)
{
Context.Dispose();
}
}
}
问题:这是在存储库之间共享连接的适当方式吗?
访问各种存储库时,我的单元测试出现间歇性故障。存储库方法 GetEntityByName 引发异常
public IOfferResult GetEntityByName(string name)
{
return Context.Entities.Where(o => o.Name == name).FirstOrDefault()
}
测试方法Tests.Service.TestDelete 抛出异常:System.ObjectDisposedException:ObjectContext 实例已被释放,不能再用于需要连接的操作。
如果数据库已经存在,则代码按预期执行。当我将 GetEntityByName(string name) 的实现更改为以下非性能代码时,它也可以工作
public IOfferResult GetEntityByName(string name)
{
foreach (OfferResult offer in Context.Offers)
{
if (offerName.ToLower() == offer.Name.ToLower())
{
return offer;
}
}
}
问题:这里发生了什么?
请记住,如果在我运行测试时数据库存在,我根本不会收到错误。
tia, jt