Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CA2000和我不';我看不出原因_C#_.net_Entity Framework_Dispose - Fatal编程技术网

C# CA2000和我不';我看不出原因

C# CA2000和我不';我看不出原因,c#,.net,entity-framework,dispose,C#,.net,Entity Framework,Dispose,我目前正在编写一个项目,使用Microsoft代码分析,但收到以下错误: CA2000:在失去作用域之前处理对象 这是我围绕实体框架编写的代码 public bool IsInstalled(InstallationContext context) { var dbContext = new ScheduleFrameworkDataContext(); var repository = new TaskRepository(dbContext); try {

我目前正在编写一个项目,使用Microsoft代码分析,但收到以下错误:

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上下文)。 然而,我仍然收到这个错误


我在这里遗漏了什么吗?

代码分析工具就在这个例子中

如果
TaskRepository()
构造函数抛出,那么
finally
块将不会运行(因为异常是在
try
块之外抛出的),并且
dbContext
将不会被处理


将构造函数调用和赋值移动到
try
块内的
repository
将抑制警告。

代码分析工具在这种情况下是正确的

如果
TaskRepository()
构造函数抛出,那么
finally
块将不会运行(因为异常是在
try
块之外抛出的),并且
dbContext
将不会被处理


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

与论坛网站不同,我们不使用“谢谢”或“感谢任何帮助”或签名。看,TaskRepository是可处置的吗?不,不是。但这不是上下文本身的错误吗?我不太明白。@kevindeconck如果你用
使用
语句包装你的上下文,你会得到错误吗?这正是
使用
的有效方法,也是处理实现
IDisposable
的对象的推荐方法。您是否尝试了相同的代码,但使用了“using”语句?我所能想到的是,代码分析没有识别finally子句中的处理。与论坛网站不同,我们不使用“谢谢”或“感谢任何帮助”或签名。看,TaskRepository是可处置的吗?不,不是。但这不是上下文本身的错误吗?我不太明白。@kevindeconck如果你用
使用
语句包装你的上下文,你会得到错误吗?这正是
使用
的有效方法,也是处理实现
IDisposable
的对象的推荐方法。您是否尝试了相同的代码,但使用了“using”语句?我所能想到的就是代码分析没有识别finally子句中的处理。