c# – Sql Server Compact Edition并发/线程安全(即不是线程安全的)

在过去的几个月里,我首次使用Entity Framework代码和sql server CE开发了一个应用程序.我发现2的组合非常有用,与我以前的做事方式(特别是ADO.NET)相比,它允许疯狂地更快的开发时间.

但是,今天早上我和一些同事遇到了一个问题,我们在任何有关SqlServer CE的文档中都没见过.它不能同时处理多个插入!

在我遇到这个问题之前,我认为CE可能成为我的首选数据库.我发现这个的原因是在我的应用程序中我需要立即向Web服务发出多个请求,并且它引入了一些瓶颈,所以我继续使用Parallel.Invoke调用来发出多个请求.

这一切都很好,直到我打开我的应用程序消息记录服务.此时我在发出Web请求时开始出现以下错误:

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问题并非出现问题.

我认为CE无法处理像这样简单的事情有点奇怪.我的意思是问题不仅仅在于线程问题 – 你是否告诉我它不能用于两个用户可能同时插入表格的Web应用程序… INSANITY!

无论如何,只是想知道是否有其他人遇到像我这样的项目,并且感到震惊(并且生气)它是这样工作的?此外,如果有人能够阐明为什么它以这种方式受限制会很酷.

最佳答案

转载注明原文:c# – Sql Server Compact Edition并发/线程安全(即不是线程安全的) - 代码日志