问题标签 [objectcontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
architecture - 在数据访问层访问 HttpContext.Current
基于对我在分层架构中的实体框架中的问题给出的答案,现在我想将我的存储库(现在只负责 CRUD 抽象,而不是业务逻辑的东西)移动到 DAL 并为业务逻辑保留 BLL。
我得出的结论是,实体上下文应被视为工作单元,因此不应重用。所以我想在我的存储库中为每个 HttpContext 创建一个 obejctcontext 以防止性能/线程 [un] 安全问题。我想在存储库中定义 objectcontext 如下:
在这种情况下,DAL 项目应该知道 HttpContext.Current 变量。我不确定这是否是一个好的做法,并想知道您的意见。
asp.net - 具有依赖注入的实体框架 ObjectContext
好吧,看来我被困在我的应用程序结构中了。这是我想要做的:
- UI 层:一个 ASP.NET 网络表单网站。
- BLL:调用 DAL 上的存储库的业务逻辑层。
- DAL:.EDMX 文件(实体模型)和带有 Repository 类的 ObjectContext,它们抽象了每个实体的 CRUD 操作。
- 实体:POCO 实体。执着无知。由 Microsoft 的 ADO.Net POCO 实体生成器生成。
我想在我的存储库中为每个 HttpContext 创建一个 obejctcontext 以防止性能/线程 [un] 安全问题。理想情况下,它会是这样的:
问题是我不想在我的 DAL 中访问 HttpContext (存储库所在的位置)。但我必须以某种方式将 HttpContext 传递给 DAL。根据我的问题here的答案,我必须使用 IoC 模式。理想情况下,我想在多层架构中 实现这样的目标。
我已经检查了 Autofac,它看起来很有希望。但我不确定如何在多层架构中实现这一点(传递 Httpcontext 以确保每个 HttpContext 实例化一个 ObjectContext)。谁能给我一些关于如何实现这一目标的工作示例?在不直接访问 DAL 中的 HttpContext 的情况下,如何知道 DAL 中的 HttpContext?我觉得我在设计多层解决方案时有点迷失了。
asp.net - 实体框架 Context.Refresh 错误的解决方法?
我使用 EF4 和自引用表(实现邻接列表层次结构)遇到了这个问题。
注意:不是多对多引用,只是单个表上的一对多。由于 EF4 中的明显错误,尝试使用失败
解决间歇性InvalidOperationException
(“ ...ObjectContext 可能处于不一致状态... ”) 。Context.Refresh
在上述帖子中,我从 Shimmy 的 connect.microsoft.com 链接中看到,该错误仍然很突出。
任何人都可以推荐一个解决方法吗?
如果您的数据库和实体框架不同步,您会怎么做?
编辑
一些可能有帮助的事实:
- 当我收到
InvalidOperationException
消息并显示“对数据库的更改已成功提交...”时,这是不正确的。他们不是。我试图将对象的ParentId
从 1 更改为 null (ParentId
类型int?
)。 - 我的对象的
ParentId
属性已正确更改为预期值(null)。我打电话Context.SaveChanges()
。然后,抛出异常。我检查了数据库,但该值尚未更新。在这种情况下,ParentId
在数据库中仍然是 1。 - 在 内部
catch
,如果我尝试通过 重新查询对象
myObj = Context.MyObjects.SingleOrDefault(o => o.Id == id)
,
则对象ParentId
保持不变。它不会被(不正确的)数据库值更新!
现在我想,好吧,这看起来很奇怪,但也许如果我再次保存,数据库将得到纠正。 Context.SaveChanges()
从内部调用后续catch
仍然不会更新数据库。(但这一次,没有抛出异常。)- 如果我对我的 SetParent 方法进行新调用,
myObj = Context.MyObjects.SingleOrDefault(o => o.Id == id)
则将
对象的参数正确地填充ParentId
为 1,即数据库中的值。
此外,为了咯咯笑,我将对象设置ParentId
为它自己的 Id,而不是 null,以表示没有父母。这工作正常,并没有导致InvalidOperationException
. 但是,由于其他原因,它是一个 PITA。例如,对象报告将自己作为额外的孩子。
所以,问题是:
- 尝试将我的自引用设置
int? ParentId
为导致异常的 null 是什么? - 为什么数据库在异常之前没有更新?
- 为什么,在里面
catch
,我不能重新同步?!
nhibernate - EF4 ObjectContext 与 NHibernate 会话
在潜入 EF4 之后,我正在尝试学习一些 NHibernate。NHibernate Session 相当于 EF4 ObjectContext(或 DbContext)吗?
具体来说,在 EF4 中,您从 ObjectContext(或 DbContext)派生,并且您的类包含每个实体的显式 ObjectSet,例如:
在我目前看到的 NHib 示例中,Session 对象没有以这种方式使用。我错过了什么吗?
multithreading - Silverlight 4 Ria 服务和多线程
我有一个运行时间很长的查询,需要很长时间才能让我的客户端保持连接。我想调用我的 DomainService,创建一个新的工作线程,然后从服务返回,以便我的客户端可以开始轮询以查看长时间运行的查询是否完成。
我遇到的问题是,由于我的调用线程立即退出,当我的工作人员尝试访问任何实体时,我会抛出异常,因为 ObjectContext 在原始线程结束时被释放。
以下是我创建新上下文并从 Silverlight 客户端调用的方法:
服务器上的入口方法:
这是使用新线程调用的 WorkerProc 方法。一旦我尝试遍历我的 query1 对象,我就会得到 ObjectContext already Disposed 异常。
我怎样才能防止这种情况发生?有没有办法为新线程创建新的上下文?我真的坚持这个。
谢谢。
entity-framework-4 - 附加与另一个 ObjectContext 分离的实体对象的最佳做法是什么?
如标题所述,有多少种方法可用?
我只是有这种情况:我从一个 ObjectContext 中获取一个实体对象,然后将实体对象从 OjbectContext 对象中分离出来,然后返回它。
稍后,如果我对此对象进行了一些更改,并且我想将更改保存回数据库。我想我应该这样写,对吧?(嗯,这对我有用。)
或者
这种方式也适用于我。
第一种方法会生成 sql 语句来更新 Url 表的所有列,但第二种方法将提供一个 sql 脚本只更新“UrlString”列。
他们都必须从数据库中检索一个临时实体对象,即上述代码中的“t”。
有没有其他方法可以达到这个目的?或者你知道的其他更好的方法?或者关于这个话题的任何官方解决方案?
非常感谢。
exception - EF4:插入带有触发器的视图时,ObjectContext 不一致
在带有 ADO.NET Entity Framework 4 的 SQL Server 中使用“Instead of”触发器的视图中插入记录时,我得到一个无效操作异常。错误消息显示:
{“对数据库的更改已成功提交,但在更新对象上下文时出错。ObjectContext可能处于不一致状态。内部异常消息:定义EntityKey的键值对不能为null或为空。参数名称:记录"}
在这个简化的示例中,我创建了两个表,Contacts 和 Employers,以及一个视图 Contacts_x_Employers,它允许我一次在这两个表中插入或检索行。表只有一个名称和一个 ID 属性,视图基于两者的连接:
并且有这个触发器:
.NET 代码如下:
使用 (var Context = new TriggersTestEntities()) { Contacts_x_Employers CE1 = new Contacts_x_Employers(); CE1.ContactName = "J"; CE1.EmployerName = "T"; Contacts_x_Employers CE2 = 新的 Contacts_x_Employers(); CE1.ContactName = "W"; CE1.EmployerName = "C"; Context.Contacts_x_Employers.AddObject(CE1); Context.Contacts_x_Employers.AddObject(CE2); Context.SaveChanges(); // 有错误的行 }
</p>
SSDL 和 CSDL(视图节点):
可以在ftp://JulioSantos.com/files/TriggerBug/的 TestViewTrggers.zip 中找到 Visual Studio 解决方案和重新创建整个应用程序的 SQL 脚本。我感谢可以提供的任何帮助。我已经花了几天的时间来解决这个问题。
entity-framework-4 - 使用 StructureMap 时释放 ObjectContext
我一直在使用 StructureMap 将 ObjectContext(实体)与延迟加载的 POCO 类一起注入到我的存储库中。这是我的 Structuremap 注册。
我已经针对我的 POCO 类定义了 Partial 类,以检索未在我的 EDMX 模式中定义的信息。例如 Community.FloorPlanImages 将是一个吸气剂,它仅从所有可用图像中过滤平面图图像。在我开始优化我的查询之前工作得很好。使用 EFProf,我发现我的所有连接都没有被关闭。我无法使用“使用”语句,因为我将 ObjectContext 本身注入到我的存储库中。因此,我在 Application_EndRequest() 中添加了以下内容。
只要我不访问我的部分 POCO 上的任何内容,这也有效。我认为 StructureMap 会在我们到达 Partial 之前关闭连接。我收到以下错误。
ObjectContext 实例已被释放,不能再用于需要连接的操作。
有什么想法可以解决这个问题吗?
更新 - 这是堆栈跟踪
ObjectDisposedException:ObjectContext 实例已被释放,不能再用于需要连接的操作。] System.Data.Objects.ObjectContext.EnsureConnection() +8550458 System.Data.Objects.ObjectQuery
1.GetResults(Nullable
1 forMergeOption) +46
System.Data .Objects.ObjectQuery 1.Load(List 1.Load(MergeOption mergeOption) +25 System.Data.Objects.DataClasses.RelatedEnd.Load() +37 System.Data.Objects.DataClasses.RelatedEnd.DeferredLoad() +8032198 系统。 Data.Objects.Internal.LazyLoadBehavior.LoadProperty(TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject) +85 System.Data.Objects.Internal.<> c_DisplayClass7 2 个参数) +2081.Execute(MergeOption mergeOption) +31
System.Data.Objects.DataClasses.EntityCollection1 collection, MergeOption mergeOption) +243 System.Data.Objects.DataClasses.EntityCollection
2.<GetInterceptorDelegate>b__1(TProxy proxy, TItem item) +101
System.Data.Entity.DynamicProxies.Community_39641A615E1AD4E19D637735C7A1EBEE61BF70BF579CDD4EBB0267E6636BEC62.get_Videos() +55 Rdx.Web.UI.AppCode.Controllers.CDController.GetCDModel(SearchParams searchParams, Int32 page, Boolean isSorting) in D:\Solutions\RDX\Rdx.Mvc\src\app\Rdx.Web.UI\AppCode\Controllers\CDController.cs:365 Rdx.Web.UI.AppCode.Controllers.CDController.Show(Int32 cid, Int32 bid) in D:\Solutions\RDX\Rdx.Mvc\src\app\Rdx.Web.UI\AppCode\Controllers\CDController.cs:70 lambda_method(Closure , ControllerBase , Object[] ) +145
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 1 继续) +263 System.Web.Mvc.<>c2 parameters) +27
_DisplayClass17.b_ 14() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter过滤器,ActionExecutingContext preContext,Func
System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func1 continuation) +263 System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
1 延续)+263 System.Web.Mvc.<>c _DisplayClass17.b_14 ()+19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func1 continuation) +263 System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
1 延续)+263 System.Web.Mvc.<>c _DisplayClass17.b_14() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 filters, ActionDescriptor actionDescriptor, IDictionary
2 参数) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343 System.Web.Mvc.Controller。 ExecuteCore() +116 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.< >c _DisplayClassb.b_ 5() +37 System.Web.Mvc.Async.<>c _DisplayClass1.b_ 0() +21 System.Web.Mvc.Async.<>c _DisplayClass81.<BeginSynchronous>b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +62 System. Web.Mvc.<> c_DisplayClasse.b_d() +50 System.Web.Mvc.SecurityUtil.b__0(动作 f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(动作动作) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult 结果) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8841105 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤, 布尔值和同步完成)+184
**更新 2:我的 Application_EndRequest 被击中两次。什么可能导致这种情况发生?**
第一次命中时堆叠。
Nhs.Web.UI.DLL!Nhs.Web.UI.Global.Application_EndRequest(object sender = {ASP.global_asax}, System.EventArgs e = {System.EventArgs}) 第 58 行 C# System.Web.dll!System.Web .HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 0x95 字节
System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step = {System.Web.HttpApplication.SyncEventExecutionStep }, ref bool completedSynchronously = true) + 0x4c 字节
System.Web.dll!System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(System.Exception 错误) + 0x13e 字节
System.Web.dll!System.Web.HttpApplication.System.Web .IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext context, System.AsyncCallback cb, object extraData) + 0xad 字节
System.Web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest WR = {System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6}) + 0x1a2 字节
System.Web.dll!System.Web.HttpRuntime.ProcessRequestNoDemand(System. Web.HttpWorkerRequest wr) + 0x7d 字节
System.Web.dll!System.Web.Hosting.ISAPIRuntime.ProcessRequest(System.IntPtr ecb, int iWRType) + 0xfd 字节
[Appdomain 转换]
[本机到托管转换]
第二次命中时堆叠
Nhs.Web.UI.DLL!Nhs.Web.UI.Global.Application_EndRequest(object sender = {ASP.global_asax}, System.EventArgs e = {System.EventArgs}) 第 58 行 C# System.Web.dll!System.Web .HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 0x95 字节
System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step = {System.Web.HttpApplication.SyncEventExecutionStep }, ref bool completedSynchronously = true) + 0x4c 字节
System.Web.dll!System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(System.Exception 错误) + 0x13e 字节
System.Web.dll!System.Web.HttpApplication.ResumeStepsWaitCallback(object错误)+ 0x1e 字节
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state) + 0x2d bytes mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool ignoreSyncCtx) + 0xb0 字节
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() + 0x5a 字节 mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch() + 0x147 字节
mscorlib.dll!System.Threading._ThreadPoolWaitCallback .PerformWaitCallback() + 0x2d 字节
[本地到托管转换]
[Appdomain 转换]
[本地到托管转换]
c# - C#/EF 和存储库模式:将 ObjectContext 放在具有多个存储库的解决方案中的什么位置?
我的应用程序中有多个存储库。我应该把 ObjectContext 放在哪里?现在,我ObjectContext ctx;
在每个存储库中都有一个参考。解决此问题的最明智和最安全的方法是什么?
model-view-controller - 实体框架 4 上下文?
我只是在寻找一些关于其他人在使用 EF4 时如何管理他们的上下文的反馈。我正在创建一个 MVC 应用程序,使用(我认为 :))工作单元、服务层、存储库、EF4 w/POCO 技术。
我的控制器利用采用 UOW 的服务,然后利用存储库从 EF 获取 POCO。
这是否正确实施?
看看下面,任何反馈表示赞赏!
控制器
工作单元
服务
存储库