- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用为每个请求创建一个 ObjectContext 的概念。从技术上讲,我将 ObjectContext 实例添加到 HttpContext.Current.Items。但我不知道如何正确地杀死这个实例。使用 HttpModule 并在其中配置 ObjectContext 是否安全?我的意思是,可能会为任何类型的请求调用 HttpModule。我不想使用 DI/IoC 事项,因为项目需要轻量级(不允许第三方库)。
更新:这里是简单的代码:为每个请求创建了一个 ObjectContext(实体类)
public static class ObjectContextPerRequest
{
public const string ObjectKey = "_per_request_context_key";
public static Entities PerRequest
{
get
{
if (HttpContext.Current.Items[ObjectKey] != null)
{
var eContext = new Entities();
HttpContext.Current.Items.Add(ObjectKey, eContext);
return eContext;
}
return HttpContext.Current.Items[ObjectKey] as Entities;
}
}
}
和一个处理器模块:
class ObjectContextManagerModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.EndRequest += (s, e) => { Dispose(); };
}
public void Dispose()
{
if (HttpContext.Current.Items[ObjectContextPerRequest.ObjectKey] != null)
{
var edmx = (ObjectContext)HttpContext.Current.Items[ObjectContextPerRequest.ObjectKey];
edmx.Dispose();
edmx = null;
}
}
}
最佳答案
在 BeginRequest 期间创建上下文然后在 EndRequest 或 ReleaseRequestState(可能是 EndRequest)期间处理它会更安全。 Init 是在模块启动时,Dispose 是在模块本身被释放时,模块不会在每次请求时都被创建和释放。
* 评论更新 *
该模块应该使用它的 Init 方法附加到应用程序事件,如下所示:
public void Init(HttpApplication app)
{
app.BeginRequest += new EventHandler(OnBeginRequest);
app.EndRequest += new EventHandler(OnEndRequest);
}
请注意,还有其他语法可用,但这是 MSDN 上记录的语法。
这将在命中您的应用程序的每个请求时触发。因此,如果您的 IIS 设置通过应用程序路由静态文件请求(例如图像和 css 文件)(这对于集成管道模式下的 IIS 7 是正确的),那么您的事件处理程序需要通过在某些情况下不启动 ObjectContext 实例来解决这一问题你不需要一个。
* MVC 更新 *
由于您使用的是 MVC 应用程序,您还可以考虑在 Controller 基类或操作过滤器中使用 OnActionExecuting 和 OnActionExecuted 调用执行此操作。
作为 ActionFilter,您可以确保仅将其应用于需要数据上下文的 Controller 。
关于c# - 使用后处理 ObjectContext(每个请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6292993/
首先,让我自己对必须维护 VB5 代码做出强制性的尖刻评论:是的,这很可怜,但我们可以切入正题吗?谢谢。 我不得不重新审视一些在 1998 年编写并且自 2003 年以来没有被触及的非常旧的代码。我遇
我想在 EntityFrameWork 6 中使用脚手架,但得到这个: Unable to retrieve metadata for '[myNameSpace].Models.prod'. Una
为什么我打不通DbContext.ObjectContext直接地?我可以做到((IObjectContextAdapter)context).ObjectContext 我认为内部机制是这样的接口(
我们在控制台应用程序中运行一个非常简单的函数,该函数循环遍历数据库并将表列到变量中。当然,最初它做的更多,但我们将其简化为仅列出 1 个表。 我们注意到,每次创建新的 ObjectContext 时,
我在我的应用程序中定义了三个数据模型。我的问题是,如果我需要三种不同的上下文?那么三个不同的 sqlite 文件? 目前,每次我将一条记录保存到我的数据库中时,我都会执行以下操作: managedOb
这里只是一个快速的完整性检查! 如果我在实例类中有一个静态方法,例如: public class myClass { public static void AMethod() {
我在使用 EntityFramework 4.0 创建关系时出错 对数据库的更改已成功提交,但更新对象上下文时出错。 ObjectContext 可能处于不一致状态。 内部异常消息:无法检索关系“Co
我按照此处描述的方式使用 Entity Framework : Entity framework uses a lot of memory 我意识到我需要使用“using”语句才能正常工作。当我在做的
我已经使用内存分析器对此进行了检查,没有真正的实体保留在内存中但是哈希集、字典和 EntityKey 对象——但我找不到如何断开这些引用的方法。 如此简单的问题:如何阻止上下文(或其 ObjectSt
我正在创建一个委托(delegate)来检索数据库中的所有专辑记录。我在另一个项目中使用了同样的方法,但由于某种原因,这次我遇到了错误。 我错过了一步吗?我不确定为什么会出现此错误。 代码
如何更新数据存储中的所有脏实体,并将其更改的值重置为原始存储值? 方法ObjectContext.Refresh需要将要刷新的实体作为参数。 最佳答案 以下通常有效: Context.Refresh(
有没有办法保存单个跟踪对象的更改,而不是 ObjectStateManager 中的所有对象,我的意思是: ObjectContext.SaveChanges(Contact) 最佳答案 也许您可以创
我在这里做错了什么? ... using (var ctx = ObjectContextManager.GetManager("MyDataContext")) { var idsToUpd
我有一个用 php 编写的宠物项目。我的代码所做的工作之一是加载一堆 csv 文件并将它们写入具有自动生成的主键和多部分唯一键的 MySQL 表。我无法控制和检查是否已处理某些文件的方法,因此唯一 k
我使用不同的命令和不同的参数多次调用 ObjectContext.ExecuteStoreCommand,尽管我对几个命令使用相同的参数列表(对象)。我收到以下异常: System.ArgumentE
我正在使用为每个请求创建一个 ObjectContext 的概念。从技术上讲,我将 ObjectContext 实例添加到 HttpContext.Current.Items。但我不知道如何正确地杀死
我已经看到这个问题被问了一百万次,但我遇到的每一个建议似乎都已经涵盖了。 我的 MVC 解决方案中有 Entity Framework ,我有一个“存储库”,它试图检索 MyObject 的集合: p
我不太确定 Dispose 我的 ObjectContext 的正确方法是什么。这是我的设置方式: public abstract class DataManagerBase where T:Obje
我正在尝试将大量行(>10,000,000)插入 MySQL使用 EF ObjectContext(数据库优先)的数据库。看完this question的回答后我编写了这段代码(批量保存)来插入大约
我尝试在 MVC4 中级联下拉列表。我有 2 个下拉列表 1 - 类别2 - 子类别。 当用户创建新产品时,他需要选择类别,然后选择与该类别相关的子类别。我将 ajax 与杰森一起使用。 publi
我是一名优秀的程序员,十分优秀!