在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; }
}
}
} 我是否希望在我想要调用查询时随时创建新实例?
答案 0 :(得分:1)
Context对象是IDisposable
,所以一旦你完成它的使用它就必须通过在using
构造中包围它来处理它。或者确保您使用Context in的类也正确实现IDisposable,它也会处理Context。
答案 1 :(得分:0)
没有。每次使用它时都应该创建一个新的对象上下文。它确实可以包含多个查询。
请注意,您不应该长时间打开对象上下文,例如在桌面应用程序中。这是因为其他人所做的更改对您当前的对象上下文不可见。
在网站中,您可以将其定义为全局对象,因为网站通常会立即进行渲染。每次有 GET 或 POST 请求时,都会以一种方式定义它,并在网站渲染完成后处理它。
答案 2 :(得分:0)
您应该在它的预期生命周期结束时处理Context。生命周期可以基于每个请求(web)或跨越桌面应用程序的整个生命周期(例如,单个用户桌面而不是其他数据库用户)。您还应该构建服务/逻辑层,以便它不定义Context的生命周期,而应该基于应用程序本身何时处置Context。