我目前正在编写一个项目并使用Microsoft Code Analysis,但确实收到以下错误:
CA2000:在丢失范围之前处置对象。
这是我在实体框架周围编写的代码。
public bool IsInstalled(InstallationContext context)
{
var dbContext = new ScheduleFrameworkDataContext();
var repository = new TaskRepository(dbContext);
try
{
// Check if there is already a task with the same name.
if (repository.Get().Select(x => x.Name == context.InstallationParameters.Name).Any())
{ return true; }
}
finally { dbContext.Dispose(); }
return false;
}
现在,我确实认为我的上下文是因为它位于finally块中。 (上下文是EF Code First DB Context)。 但是,我仍然收到这个错误。
我在这里错过了什么吗?
答案 0 :(得分:5)
在这种情况下,代码分析工具正确。
如果TaskRepository()
构造函数抛出,则finally
块不会运行(因为异常在try
块之外抛出),dbContext
将不被处置。
将构造函数调用和repository
块中的try
分配移动将阻止警告。