Entity framework 如何正确使用单位工作模式中的配置?
我知道这个问题以前被问过好几次,但我没有得到我想要的答案。 因此,我已经实现了存储库(通用)和UOW模式,因此我可以使用EF访问我的数据库。以下是UnitOfWork类的一部分:Entity framework 如何正确使用单位工作模式中的配置?,entity-framework,repository,unit-of-work,Entity Framework,Repository,Unit Of Work,我知道这个问题以前被问过好几次,但我没有得到我想要的答案。 因此,我已经实现了存储库(通用)和UOW模式,因此我可以使用EF访问我的数据库。以下是UnitOfWork类的一部分: protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { entities.Disp
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
entities.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private BDEntities entities = null;
public UnitOfWork()
{
if (entities == null)
{
entities = new BDEntities();
}
}
问题是:谁在调用void Dispose方法??我没有看到使用这种方法的例子
这是工作单元的上半部分:
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
entities.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private BDEntities entities = null;
public UnitOfWork()
{
if (entities == null)
{
entities = new BDEntities();
}
}
是这样吗?我应该使用“使用”吗?如果是,为什么我需要Dispose方法
你能给我举一个恰当而简单的用法的例子吗
谢谢,,
Rotem您之所以没有遇到任何关于谁调用dispose的示例,是因为UoW通常与依赖项注入和依赖项注入容器(如Autofac)一起使用。在这种情况下,这个容器负责创建对象并在以后处理它们。诚然,这不是使用UoW的唯一方式,但它是一种常见模式 至于回答你的问题:我认为你采取的方法或多或少是正确的。UoW类应该是包装上下文的类,因此也应该是处理上下文的类(实际上,DbContext本身就是UoW) 不过,您可以简化Dispose方法。由于您没有任何非托管和非
IDisposable
资源(如指针),因此完全可以在UoW的Dispose方法中调用上下文的Dispose方法:
public void Dispose()
{
entities.Dispose();
}
(没有其他Dispose
方法,没有SuppressFinalize
调用)
是的,你绝对应该使用
使用。这就是为什么您需要一个Dispose()
方法;只有实现IDisposable类型的对象才能在using
块中使用。如果您编写一个using块,它基本上会转换为try-finally块;using块中的代码进入try块,最后调用Dispose()
。非常感谢!因此,基本上,该方法应该是这样的:if(entities==null){using(entities=new bsodenties()){};},我并不需要Dispose方法,因为“using”已经封装了它?是吗?是的,我认为基本上应该这样使用。至于Dispose()方法:如果使用using块,则在处理完对象后不必显式调用它。但是您确实需要在类中实现它,如图所示,这样就可以通过using块的封装调用调用它。