我不知道的数据库缓存?

时间:2010-06-11 12:45:04

标签: asp.net-mvc linq-to-sql sql-server-2008 iis-7

我正在使用asp.net mvc,linq2sql,iis7和sqlserver express 2008.

我收到这些间歇性服务器错误,插入时发生主键冲突。我在我的开发计算机上使用不同的设置,所以我无法调试。过了一会儿他们就走了。重启iis有帮助。我感觉到有一些我不知道的缓存。有人可以帮我解决这些错误吗?

  

无法在对象'dbo.EnquiryType'中插入具有唯一索引'IX_EnquiryType'的重复键行。

关于Venemos回答的编辑

是否有可能另一个应用程序同时访问同一个数据库? 是的,但没有这个特定的表,没有插入或更新。还有一个表我遇到了同样的问题,但它与模型的不同部分有关。

您在什么上下文中创建新的DataContext实例的频率是多少? 只有一次,使用单例模式。

数据库或应用程序生成的主键是什么? 数据库中。

您使用的是哪个版本的ASP.NET MVC以及哪个版本的.NET? RC2和3.5。

2 个答案:

答案 0 :(得分:1)

嗯,可能是因为很多原因。我会给你一些问题。请使用有关这些信息的信息编辑您的问题,我们可以更直接地帮助您。

  • 是否有可能另一个应用程序同时访问同一个数据库? 这可能是最可能的原因。我也经历过这一点。
  • 您在什么上下文中创建新的DataContext实例的频率是多少? 最好的方法是根据请求创建一个新的。
  • 数据库或应用程序生成的主键是什么?
  • 您使用的是哪个版本的ASP.NET MVC以及哪个版本的.NET?

答案 1 :(得分:1)

两个猜测:

1)如果你有一个单独的DataContext,那是不是意味着它被所有线程共享?

DataContext的MSDN参考说一个实例“设计为持续一个工作单元”,通常是“在方法范围或作为短期类的成员”创建的。

我会尝试远离单身模式,并在每次需要时创建一个新的上下文。

2)当你说你的密钥是由数据库生成的时候,是通过身份字段还是某种“选择最大+ 1”模式?如果不是通过身份,那么您可能有并发连接获得相同的“下一个”键值。检查您的事务隔离级别。

编辑 - 继续发表评论 您确定索引违规是否在主键上?使用SQL Server Management Studio,主键通常具有 PK _ 前缀, IX _ 用于其他索引。检查构成“IX_EnquiryType”的字段,确保它不仅仅是导致问题的罕见逻辑问题。