我是否需要在我想要调用查询的任何时候从EntityFramework ObjectContext创建一个新实例?

时间:2015-04-14 19:07:17

标签: c# entity-framework objectcontext

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

}

} 我是否希望在我想要调用查询时随时创建新实例?

3 个答案:

答案 0 :(得分:1)

Context对象是IDisposable,所以一旦你完成它的使用它就必须通过在using构造中包围它来处理它。或者确保您使用Context in的类也正确实现IDisposable,它也会处理Context。

答案 1 :(得分:0)

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

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

在网站中,您可以将其定义为全局对象,因为网站通常会立即进行渲染。每次有 GET POST 请求时,都会以一种方式定义它,并在网站渲染完成后处理它。

答案 2 :(得分:0)

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