在 StructureMap 中为控制台应用程序设置 DbContext 的最佳实践是什么?
我使用 StructureMap、EF 4.1/POCO。 控制台应用程序假设对某些数据集运行 2 个后续操作,例如操作 1 和操作 2。我将 DbContext 设置为单例。这会导致操作 2 出现问题,因为操作 1 在其 DbContext 中留下了一些垃圾,导致操作 2 无法正常工作。同时,我无法将 DbContext 设置为“每次调用”,因为操作 1 使用 2 个存储库,共享通过其构造函数传递的相同 DbContext。所以理想情况下我需要在操作2之前重新初始化/重置/清理DbContext。有什么想法吗?
谢谢
I use StructureMap, EF 4.1/POCO.
Console app supposes to run 2 consequent operations upon some set of data, lets say operation1 and operation2. I set DbContext up as an singleton. This causes problem in operation2 as operation1 left some trash in its DbContext that prevent operation2 works well. In the same time I can not set up DbContext as 'per call' coz operation1 uses 2 repositories sharing the same DbContext passing through their constructor. So ideally I need reinitialize/reset/cleanup DbContext before operation2. Any ideas?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只需使用两个不同的上下文即可。没有比创建新上下文更好的解决方案来重置上下文。如果您正在与当前的架构作斗争,只需改进它以支持新的场景。不是传递上下文实例,而是传递上下文工厂,它将能够根据需要创建尽可能多的上下文实例。与存储库相同 - 您可以让工厂根据需要创建新的存储库实例。
编辑示例:
假设您正在使用 EFv4.1更新1。它提供了新的接口
IDbContexFactory
。您可以这样定义您的类:这是您为上下文传递工厂的示例,但如果您愿意,您可以对存储库执行相同的操作。
Simply use two different contexts. There is no better solution to reset context then creating a new one. If you are fighting with your current architecture simply improve it to support new scenario. Instead of passing context instance pass a context factory which will be able to create you as many context instances as you need. Same with repositories - you can have factory to create a new repository instances on demand.
Edit with example:
Let's suppose that you are using EFv4.1 Update 1. It offers new interface
IDbContexFactory<TContext>
. You can define your class this way:This was example where you pass factory for context but you can do the same for repository if you want to.