繁体   English   中英

我需要调用查询时,是否需要从EntityFramework ObjectContext创建新实例?

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

在C#实体框架中,我确实创建了上下文的新实例,如下所示:

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; }
    }

}

确实可以随时调用查询来创建新实例吗?

Context对象是IDisposable因此通常在using完后,就必须将其包围在using构造中,以便对其进行处理。 或者确保您正在使用Context的类也正确实现了IDisposable,并且它也处理了Context。

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

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

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

您应该在预期的生命周期结束时处置Context。 生命周期可能基于每个请求(Web)或整个桌面应用程序的整个生命周期(例如,单个用户桌面,而没有其他数据库用户)。 您还应该构建服务/逻辑层,以便它不定义上下文的生命周期,而应基于应用程序本身何时放置上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM