![](/img/trans.png)
[英]Do I need to dispose of a DbContext if it was created from an 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。
否。每次使用新对象上下文时,都应该创建一个。 它确实可以包含多个查询。
请注意,不要长时间打开对象上下文,例如在桌面应用程序中。 这是因为其他人所做的更改对您当前的对象上下文不可见。
在网站中,您可以将其定义为全局对象,因为网站通常可以立即完成渲染。 定义它的方式是在您每次有GET或POST请求时创建它,并在网站渲染完成后将其处理。
您应该在预期的生命周期结束时处置Context。 生命周期可能基于每个请求(Web)或整个桌面应用程序的整个生命周期(例如,单个用户桌面,而没有其他数据库用户)。 您还应该构建服务/逻辑层,以便它不定义上下文的生命周期,而应基于应用程序本身何时放置上下文。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.