Кеш базы данных, о котором я не знаю? - PullRequest
1 голос
/ 11 июня 2010

Я использую asp.net mvc, linq2sql, iis7 и sqlserver express 2008.

Я получаю эти периодически возникающие ошибки сервера, конфликты первичного ключа при вставке.Я использую другую настройку на своем компьютере разработки, поэтому я не могу отлаживать.Через некоторое время они уходят.Перезапуск iis помогает.У меня такое ощущение, что где-то есть кеш, о котором я не знаю.Может ли кто-нибудь помочь мне разобраться в этих ошибках?

Невозможно вставить строку с повторяющимся ключом в объекте 'dbo.EnquiryType' с уникальным индексом 'IX_EnquiryType'.

Правкиотносительно ответа Venemos

Возможно ли, что другое приложение также одновременно обращается к той же базе данных? Да, есть, но нет этой конкретной таблицы и нет вставок или обновлений.Есть еще одна таблица, с которой я сталкиваюсь с той же проблемой, но она связана с другой частью модели.

Как часто и в каком контексте вы создаете новый экземпляр DataContext? Только один раз, используя шаблон синглтона.

Являются ли первичные ключи, генерируемыебаза данных или приложение? База данных.

Какую версию ASP.NET MVC и какую версию .NET вы используете? RC2 и 3.5.

Ответы [ 2 ]

1 голос
/ 11 июня 2010

Две догадки для вас:

1) Если у вас есть одноэлементный DataContext, не означает ли это, что он используется всеми потоками?

В справочнике MSDN для DataContext говорится, что экземпляр «рассчитан на одну единицу работы» и обычно создается «в области действия метода или как член недолговечных классов».

Я бы попытался отойти от шаблона синглтона и создавать новый контекст каждый раз, когда это необходимо.

2) Когда вы говорите, что ваши ключи генерируются базой данных, это происходит через поля Identity или какой-то шаблон «выбрать макс + 1»? Если не идентификатором, то у вас могут быть параллельные соединения, получающие то же самое значение «следующего» ключа. Проверьте уровни изоляции транзакции.

РЕДАКТИРОВАТЬ - согласно комментарию Вы уверены, что нарушение индекса относится к первичному ключу ? При использовании SQL Server Management Studio первичным ключам обычно присваивается префикс PK_ , а IX_ используется для дальнейших индексов. Проверьте поля, которые составляют «IX_EnquiryType», и убедитесь, что это не просто редкая логическая проблема, которая вызывает ваши проблемы.

1 голос
/ 11 июня 2010

Ну, это может быть по многим причинам.Я дам вам несколько вопросов.Пожалуйста, отредактируйте ваш вопрос, указав информацию об этом, и нам будет гораздо проще помочь вам.

  • Возможно ли, что другое приложение одновременно обращается к той же базе данных?
    Этобудет наиболее вероятной причиной.Я тоже это испытал.
  • Как часто и в каком контексте вы создаете новый экземпляр DataContext?
    Лучшим способом было бы создание нового для каждого запроса.
  • первичные ключи, сгенерированные базой данных или приложением?
  • Какую версию ASP.NET MVC и какую версию .NET вы используете?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...