C# CA2000和我不';我看不出原因
我目前正在编写一个项目,使用Microsoft代码分析,但收到以下错误: 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 {
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子句中的处理。