Sql Server Compact Edition并发性/线程安全性(即非线程安全)



在过去的几个月里,我首次使用实体框架代码和sql server CE开发了一个应用程序。我发现这两种方法的结合非常有用,与我以前的工作方式(尤其是ADO.NET)相比,它允许更快的开发时间。

然而,今天早上,我和一些同事遇到了一个问题,这个问题在任何关于SqlServer CE的文档中都从未见过。它不能同时处理多个插件!

在我遇到这个问题之前,我一直认为行政长官可能会成为我的首选数据库。我发现这一点的原因是,在我的应用程序中,我需要一次向web服务发出多个请求,这会带来一些瓶颈,所以我开始使用Parallel.Invoke调用来发出多个要求。

这一切都很好,直到我打开我的应用程序消息记录服务。在这一点上,我开始得到以下错误,当提出网络请求:

A duplicate value cannot be inserted into a unique index. [ Table name = Accounts,Constraint name = PK__Accounts__0000000000000016 ]
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlServerCe.SqlCeException: A duplicate value cannot be inserted into a unique index. [ Table name = Accounts,Constraint name = PK__Accounts__0000000000000016 ]

我觉得奇怪。我的第一个声明是,这一定与DbContext有关,也许我使用的DbContext是静态的,或者我的Repository类中的其他东西是静态的并导致了问题,但在四处探查后,我确信这与我的代码无关。

然后我提请同事们注意,过了一段时间,他们决定它必须是SqlServer CE,在我们都设置了不同的测试项目,试图使用线程重新创建问题之后,几乎每次都会重新创建它,而当使用Sql Server Express时,问题并没有出现。

我只是觉得有点奇怪,特首不能处理这么简单的事情。我的意思是,问题不仅在于线程——你是不是告诉我,它不能用于两个用户可以同时插入到表中的web应用程序。。。疯狂!

不管怎样,只是想知道是否有其他人像我一样,这么晚才进入一个项目,并对它的工作方式感到震惊(和恼火)?此外,如果有人能解释为什么它会以这种方式受到限制,那就太酷了。

它看起来像是SQL CE中的一个bug。看见http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=641518

最新更新