在ASP.NET类中处理事物

时间:2012-07-23 23:12:53

标签: c# .net ado.net

我有一个使用C#类文件的网站,在文件的顶部,我有:

JTSEntities database = new JTSEntities();(ADO.NET的东西)。

我把它放在首位,因为我不想一遍又一遍地写同样的东西。

但是它提出了一个问题......因为它在那里是最重要的,它将如何处理,以及何时 - 当用户关闭页面时如何处理它(或我是否需要)?

3 个答案:

答案 0 :(得分:6)

保持包装数据库连接的时间超过需要的时间是不好的做法。

最佳做法是在当前操作不再需要时释放数据库连接(例如填充初始值等),例如,

之类的东西
using (JTSEntities database = new JTSEntities())
{
    // Use database
}

如果它实现了IDisposable。

如果出于某种原因,必须在页面持续时间内保持活动状态,请确保调用适当的方法来释放资源(.Close(),. Dispose()等)在页面关闭事件处理程序。

答案 1 :(得分:2)

在此类中实现IDisposable并在Dispose()方法中处理此对象。使用此类时,请确保在完成后调用Dispose(最好使用using块)

除此之外,你不必担心它。

public class MyClass : IDisposable
{
    protected JTSEntities database = new JTSEntities();

    public void Dispose() 
    {
        database.Dispose();
    }
}

// When calling this class

using(MyClass cls = new MyClass())
{
    // Do Stuff
}  // Dispose is automatically called here.

答案 2 :(得分:2)

好的,根据属性的类型,我们可以说它是instance attribute。这意味着此属性将具有与其具有相同生命周期的生命周期,除非将其实例传递给另一个对象。

如果它受保护,那么只有所有者对象及其子对象(即从该类继承的对象)才能访问它。如果你没有将它作为参考参数传递,那么我们可以使用第一个语句:一旦清理了对象,它就会被GC清除。

如果您只是在常规的webform页面生命周期中使用此对象,那么您不必担心处置它。页面生命周期将为您完成。

此致

相关问题