我有一个实例化EF的数据库上下文的控制器。 (因为我确信大部分都没有实现存储库模式。)
当我在我的项目上运行代码分析时,它建议实现IDisposable,所以我编写了以下代码。
#region Implementation of IDisposable
public void Dispose()
{
Console.WriteLine("Dispose");
Dispose(true);
GC.SuppressFinalize(this);
}
// The bulk of the clean-up code is implemented in Dispose(bool)
protected override void Dispose(bool disposing)
{
Console.WriteLine("Dispose(disposing)");
if (disposing)
{
// free managed resources
if (_dataService != null)
{
((IDisposable)_dataService).Dispose();
_dataService = null;
}
// free managed resources
if (_db != null)
{
((IDisposable)_db).Dispose();
_db = null;
}
}
base.Dispose(disposing);
}
#endregion
我也尝试过。
protected new virtual void Dispose(bool disposing)
但我的console.writeline语句永远不会执行。我究竟做错了什么?为什么不在我的控制器上调用Dispose()?
答案 0 :(得分:2)
我个人认为在这种情况下最好的做法是将数据库上下文从控制器中分离出来并将其移动到服务层。你可以让它们使该类实现IDisposable并将对服务层类的引用传递给控制器以使用它
在执行此操作时,您将创建一个不依赖于数据库的控制器。术语瘦的控制器,脂肪模型适用于此。服务层将在此实例中充当模型。您还可以将服务层和控制器(如果需要)单独测试彼此隔离
答案 1 :(得分:2)
BTW你不会看到console-writeline - 而是使用System.Diagnostic.Debug.WriteLine