Page_Init()中的IDisposable错误

时间:2013-03-02 13:17:48

标签: c# entity-framework-4 idisposable

这真是令人沮丧: 我之前在参考实体框架时发布了这个问题  Using IDisposable in EF现在这个错误消失了,但我无法理解这一点:

protected void Page_Init(object sender, EventArgs e)
    {
        try
        {
            String testCondition = Request.QueryString["Type"];
                switch (testCondition)
                {
                    case "A":
                        using (var rpt = new Report())
                        {
                         List<Class> lst= new ActionDBOClass.ActionMethod();    
                         // other code for crstal report view
                         //setting datasource of the same report
                        }
                        break;
                }
         }
    }

但是后来我也警告我必须在ActionMethod上实现dispose(实际上我在同一个类中完成了Idisposable实现,如:

 public class ActionDBOClass:IDisposable
{
    private bool _disposed = true;
    public void Dispose()
    {
        Dispose(_disposed);
        GC.SuppressFinalize(this);
    }
    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                context.Dispose();
                // Dispose other managed resources.
            }
            //release unmanaged resources.
        }
        _disposed = true;
    }

我还需要做什么? 我有类似的开关盒,这是我展示的第一个。

1 个答案:

答案 0 :(得分:0)

如果不在Page_Init方法之外使用lst,请在返回之前调用lst.Dispose()。类似的东西:

case "A":
    using (var rpt = new Report())
    {
    List<Class> lst= new ActionDBOClass.ActionMethod();    
    // other code for crstal report view
    //setting datasource of the same report
    lst.Dispose();
    }
    break;

更安全的方法是执行类似的操作(List lst = new ActionDBOClass.ActionMethod()){...因为这将确保在抛出异常时调用Dispose,或者在try块之外声明lst如果lst!= null,则调用finally块中的Dispose。