CA2000和我都没有看到原因

时间:2014-04-14 12:26:14

标签: c# .net entity-framework dispose

我目前正在编写一个项目并使用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)。 但是,我仍然收到这个错误。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:5)

在这种情况下,代码分析工具正确。

如果TaskRepository()构造函数抛出,则finally块不会运行(因为异常在try块之外抛出),dbContext将不被处置。

将构造函数调用和repository块中的try分配移动将阻止警告。