我真的被困在这里了。
我有一个 asp.net mvc 应用程序并使用 StructureMap 2.5.3 (SM) 在我的控制器中注入服务和存储库类。所有控制器均由 SM 工厂制造。
我还有一个 Linq to SQL 数据上下文,我想通过混合进行缓存。
public class DBRegistry:Registry
{
public DBRegistry()
{
ForRequestedType<SharpShopDataContext>()
.CacheBy(StructureMap.Attributes.InstanceScope.Hybrid)
.TheDefault.IsThis(new SharpShopDataContext());
}
}
缓存似乎不起作用,因此我遇到了数据上下文问题。
多个浏览器请求都返回相同的dbcontext?!在我的一个存储库类中,我放置了这段代码。Debug.WriteLine("db hashcode: " + db.GetHashCode()+ " "+ DateTime.Now.ToString());
其中 db=datacontext 我还使用 db 打印存储库的哈希码,使用存储库打印服务,这里是多个请求的打印:
服务哈希码:6238972 26-3-2009 18:59:34
存储库哈希码:21756593 26-3-2009 18:59:34
数据库哈希码:7043935 26-3-2009 18:59:34
服务哈希码:59389065 26-3-2009 18:59:34
存储库哈希码:8331620 26-3-2009 18:59:34
数据库哈希码:7043935 26-3-2009 18:59:34
服务哈希码:11291358 26-3-2009 18:59:38
存储库哈希码:13848497 26-3-2009 18:59:38
数据库哈希码:7043935 26-3-2009 18:59:38
服务哈希码:42509361 26-3-2009 18:59:38
存储库哈希码:56101068 26-3-2009 18:59:38
数据库哈希码:7043935 26-3-2009 18:59:38
如您所见,7043935 是每次请求的数据上下文的哈希码,但服务和存储库每次都会获得一个新实例和哈希码。
因此,我得到了奇怪的错误,例如数据并发异常,因为 dbcontext 具有 4 个 webrequests 前的原始值,而数据库被另一个源更改。