我是否需要随时从 EntityFramework ObjectContext 创建一个新实例来调用查询?

Do I need to create a new instance from EntityFramework ObjectContext anytime that I want call query?

在 c# entityframework 中,我确实像这样创建新的上下文实例:

using(var context=new dataaccess.MyObjectContext()){
  ....
}

MyObjectContext 是这样的:

public partial class GlobalContext : ObjectContext
{
 public GlobalContext()
        : base("name=MyDbContext")
    //: base(ConnectionString)
    {
        CommandTimeout = 2000;

        _AssetCategory = CreateObjectSet<AssetCategory>();
        _AssetItem = CreateObjectSet<AssetItem>();
        _AssetItemType = CreateObjectSet<AssetItemType>();
        _AssetItemMUnit = CreateObjectSet<AssetItemMUnit>();
        _FileDB_Asset = CreateObjectSet<FileDB_Asset>();
}

    private ObjectSet<AssetCategory> _AssetCategory;
    public ObjectSet<AssetCategory> AssetCategory
    {
        get { return _AssetCategory; }
    }

    private ObjectSet<AssetItem> _AssetItem;
    public ObjectSet<AssetItem> AssetItem
    {
        get { return _AssetItem; }
    }

}

} 是不是我想调用查询随时创建新实例?

没有。每次使用它时都应该创建一个新的对象上下文。它确实可以包含多个查询。

请注意,您不应长时间打开对象上下文,例如在桌面应用程序中。这是因为其他人所做的更改对您当前的对象上下文不可见。

在网站中,您可以将其定义为全局对象,因为网站通常会立即完成渲染。以每次您有 GETPOST 请求时创建它的方式定义它,并在网站打开时处理它完成渲染。

Context 对象是 IDisposable,因此您必须在使用完它后立即处理它,通常是将其包围在 using 结构中。或者确保您在其中使用上下文的 class 也 正确地 实现了 IDisposable 并且它也处理了上下文。

您应该在预期生命周期结束时处置上下文。生命周期可能基于每个请求(网络)或跨越桌面应用程序的整个生命周期(例如,单用户桌面,没有其他数据库用户)。您还应该构建您的 service/logic 层,这样它就不会定义上下文的生命周期,而应该基于应用程序本身来决定何时处置上下文。