YMC*_*YMC 1 structuremap poco entity-framework-4.1 dbcontext
我使用StructureMap,EF 4.1/POCO.控制台应用程序假设在某些数据集上运行2个后续操作,比如说operation1和operation2.我将DbContext设置为单例.这会导致操作2出现问题,因为operation1在其DbContext中留下了一些垃圾,这会阻止operation2正常工作.同时我无法将DbContext设置为"每次调用".coz operation1使用2个存储库共享通过其构造函数的相同DbContext.理想情况下,我需要在operation2之前重新初始化/重置/清理DbContext.有任何想法吗?
谢谢
只需使用两种不同的上下文.没有更好的解决方案来重置上下文然后创建一个新的.如果您正在与当前架构作斗争,只需改进它以支持新场景.而不是传递上下文实例传递上下文工厂,它将能够根据需要创建多个上下文实例.与存储库相同 - 您可以让工厂根据需要创建新的存储库实例.
编辑示例:
假设您使用的是EFv4.1 Update 1.它提供了新的界面IDbContexFactory<TContext>.您可以这样定义您的类:
public class YourClass
{
private readonly IDbContextFactory<IYourContext> _factory;
public YourClass(IDbContextFactory<IYourContext> factory)
{
_factory = factory;
}
public void Operation1()
{
using (IYourContext context = _factory.Create())
{
RepositoryA repository = new RepositoryA(context);
RepositoryB repository = new RepositoryB(context);
...
}
}
public void Operation2()
{
using (IYourContext context = _factory.Create())
{
RepositoryA repository = new RepositoryA(context);
RepositoryB repository = new RepositoryB(context);
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是您为上下文传递工厂的示例,但如果您愿意,可以对存储库执行相同操作.
| 归档时间: |
|
| 查看次数: |
2928 次 |
| 最近记录: |