我是否需要随时从 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; }
}
}
}
是不是我想调用查询随时创建新实例?
没有。每次使用它时都应该创建一个新的对象上下文。它确实可以包含多个查询。
请注意,您不应长时间打开对象上下文,例如在桌面应用程序中。这是因为其他人所做的更改对您当前的对象上下文不可见。
在网站中,您可以将其定义为全局对象,因为网站通常会立即完成渲染。以每次您有 GET 或 POST 请求时创建它的方式定义它,并在网站打开时处理它完成渲染。
Context 对象是 IDisposable
,因此您必须在使用完它后立即处理它,通常是将其包围在 using
结构中。或者确保您在其中使用上下文的 class 也 正确地 实现了 IDisposable 并且它也处理了上下文。
您应该在预期生命周期结束时处置上下文。生命周期可能基于每个请求(网络)或跨越桌面应用程序的整个生命周期(例如,单用户桌面,没有其他数据库用户)。您还应该构建您的 service/logic 层,这样它就不会定义上下文的生命周期,而应该基于应用程序本身来决定何时处置上下文。
在 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; }
}
}
} 是不是我想调用查询随时创建新实例?
没有。每次使用它时都应该创建一个新的对象上下文。它确实可以包含多个查询。
请注意,您不应长时间打开对象上下文,例如在桌面应用程序中。这是因为其他人所做的更改对您当前的对象上下文不可见。
在网站中,您可以将其定义为全局对象,因为网站通常会立即完成渲染。以每次您有 GET 或 POST 请求时创建它的方式定义它,并在网站打开时处理它完成渲染。
Context 对象是 IDisposable
,因此您必须在使用完它后立即处理它,通常是将其包围在 using
结构中。或者确保您在其中使用上下文的 class 也 正确地 实现了 IDisposable 并且它也处理了上下文。
您应该在预期生命周期结束时处置上下文。生命周期可能基于每个请求(网络)或跨越桌面应用程序的整个生命周期(例如,单用户桌面,没有其他数据库用户)。您还应该构建您的 service/logic 层,这样它就不会定义上下文的生命周期,而应该基于应用程序本身来决定何时处置上下文。