MySQL的实体上下文生命周期

时间:2012-12-11 00:26:32

标签: c# mysql entity-framework entity-framework-4 mysql-connector

我是实体框架4的新手。我已经完成了一些SQL Server和MySQL的工作。我在使用MySQL时遇到了延迟加载的问题,我相信MySQL连接器不允许在同一连接上进行多次查询 - 必须先关闭它。

我想运行一个查询,在我的类的字段中存储对结果的引用,然后再修改/保存它或加载相关数据。但是,背景已超出范围并被处理掉。

class MyClass {
    List<AThing> _stuff;

    private void ReadStuff() {
        using (var context = new MyEntities()) {
            _stuff = context.TableOfStuff.ToList();
        }
    }

    // Stuff is used by other methods, bound to controls, etc.
}

那么,Stuff是否存在没有上下文?根据我的理解,上下文是更改跟踪等的内容......一旦调用ToList(),我的上下文对另一个查询就没用了。

我必须避免这个吗?有没有更好的方法来实现这一目标?我错了吗?

1 个答案:

答案 0 :(得分:1)

你的代码很好。当context超出范围时,列表中的项目将不再附加。如果您更改它们,则可以Attach将它们更改为新的上下文。但还有其他方法取决于你想做什么以及你想怎么做。

调用ToList会使您的查询具体化,但不会打开DataReader。所以你应该能够执行多个查询。