我有一个带有LinqToSql的ASP.NET MVC应用程序。数据层包含用于对数据库执行crud操作的方法。每个方法都可以从structuremap请求一个datacontext,它被配置为每个http请求返回相同的datacontext(InstanceScope.Hybrid),所以我可以在数据层上调用几个方法,最后调用submitchanges,所以所有的crud操作都是包含在一个交易中。到目前为止,这工作正常。 我还有工作流活动(使用WF4),当然在单独的线程中运行工作流线程。一些活动也使用相同的数据层执行crud操作。问题是,结构图(有时)为不同的活动返回相同的datacontext,可能是因为这些活动在同一工作流线程上运行。这会导致问题,因为datacontext可能会缓存实体的实例,这些实体在执行两个活动之间已经更改(因为数据是从Web应用程序更改的)。
例如
活性1
Web应用程序
活动2
Datacontext X1是缓存实体实例,Web应用程序之间已经改变了实体,所以我得到了changeconflict异常
从web应用程序,结构图instancecope hybrid是可以的,因为每个web请求都会给我另一个datacontext实例,从WF这不行......我无法在WF中配置structuremap以返回每个请求的实例,因为这会给方法A和方法B中的不同datacontexts ...所以A和B不会包含在一个事务中。
也许如果我能告诉structuremap处理datacontext,每当调用submitchanges时,这都会解决我的问题,但我不知道是否或如何使用structuremap来完成。
答案 0 :(得分:0)
我相信你想要的EjectAllInstances方法;这将摆脱数据上下文的缓存实例,因此下次从StructureMap请求它时,它将被创建为新的。