有没有正确的方法来使用db上下文类?

Chr*_*ian 3 c# entity-framework dbcontext

我想知道在使用Web站点的上下文类连接到db时,性能和一般最佳实践的差异是什么.考虑这两种不同的方法时,最好的方法是什么:

public class Repository()
{
    Private Context context;

    public List<User> GetUsers()
    {
        return this.context.Users.ToList();
    }
Run Code Online (Sandbox Code Playgroud)

要么

public class Repository()
{        
    public List<User> GetUsers()
    {
        using (Context context = new context())
        {
            return context.Users.ToList(); 
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

如果它将结果作为a List或as 返回是否重要IEnumerable

ila*_*man 5

MSDN复制

一生

上下文的生命周期在创建实例时开始,在实例处理或垃圾收集时结束.如果您希望将上下文控制的所有资源放置在块的末尾,请使用.使用时,编译器会自动创建try/finally块并在finally块中调用dispose.

using (var context = new ProductContext())
{    
    // Perform data access using the context
}
Run Code Online (Sandbox Code Playgroud)

在决定上下文的生命周期时,以下是一些一般性指导原则:

使用长时间运行的上下文时,请考虑以下事项:当您将更多对象及其引用加载到内存中时,上下文的内存消耗可能会迅速增加.这可能会导致性能问题.请记住在不再需要时处理上下文.如果异常导致上下文处于不可恢复状态,则整个应用程序可能会终止.随着查询和更新数据的时间之间的差距的增大,遇到并发相关问题的可能性也会增加. 使用Web应用程序时,请为每个请求使用上下文实例. 使用Windows Presentation Foundation(WPF)或Windows窗体时,请为每个窗体使用上下文实例.这使您可以使用上下文提供的更改跟踪功能.