c# - 是否有使用数据库上下文类的正确方法?

标签 c# entity-framework dbcontext

我想知道在使用网站的上下文类连接到数据库时,性能和一般最佳实践有何不同。 考虑这两种不同的方法时,最好的方法是什么:

public class Repository()
{
    Private Context context;

    public List<User> GetUsers()
    {
        return this.context.Users.ToList();
    }

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

它以 ListIEnumerable 形式返回结果是否重要?

最佳答案

复制自MSDN

生命周期

上下文的生命周期从实例创建时开始,到实例被释放或垃圾回收时结束。如果您希望上下文控制的所有资源都在 block 的末尾处理,请使用 using。当你使用 using 时,编译器会自动创建一个 try/finally block ,并在 finally block 中调用 dispose。

using (var context = new ProductContext())
{    
    // Perform data access using the context
}

在决定上下文的生命周期时,这里有一些通用准则:

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

关于c# - 是否有使用数据库上下文类的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21074911/

相关文章:

c# - 获取 Entity Framework 7 中已修改对象的列表

asp.net-core - ASP .NET Entity Framework Core 无法访问已释放的对象

c# - WPF MVVM 如何在 ICollectionView 中组合多个过滤器

c# - 在面板 winform 中放置标签

mysql - 原则 2 和垂直划分

c# - LINQ to Entities Union 抛出错误

c# - .edmx 文件是否在现实世界中使用

c# - 在 .Net 中获取实际的 dll 路径

c# - DataTable 上的 UNIQUE 约束

c# - 如何在 Entity Framework 中保存组合的(新的+修改的)分离实体?