linq2sql синхронизировал быстрые уделеты - PullRequest
0 голосов
/ 07 мая 2011

У меня возникли некоторые проблемы с синхронизацией в модульном тесте некоторых моих vb-кодов.

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

Интересно, что этот код работает нормально, когда в отладчике происходит разрыв, но происходит сбой с исключением «дублирующий ключ», когда я запускаю его сбез перерывов, что приводит меня к мысли, что существует какая-то проблема параллелизма.

Основной метакод выглядит следующим образом:

DoTest()  
  dim j as datacontext
  dim recs = from myrecs in j.mythings select myrecs where myrecs.key="key1" or  
  myrecs.key = "key2"
  if recs.count > 0
    for each rec in myrecs
      j.mythings.deleteonsubmit(rec)
    next
    j.submitchanges()
   end if
  j.dispose


  dim tc as new tablecontroller()  
  tc.addrecordtomytable("key1","value1")  
  tc.addrecordtomytable("key2","value2")  
end  

Class tablecontroller

Sub addrecordstomytable(key as string, value as string)
   dim j as new mydatacontext
   dim thing as new mything
   thing.key = key
   thing.value = value
   j.mythings.addonsubmit(thing)
   j.submitchanges
   j.dispose

end sub end class

I 'Мы подтвердили, что я правильно удалил предыдущие добавленные записи, и это прекрасно работает, как и добавление новых записей, когда у меня есть разрыв в коде, прежде чем я нажму на шаг добавления записей.но без перерыва он генерирует дубликаты исключений ключа в методе "addrecordestomytable", предполагая, что он не получил текущую версию таблицы при создании нового контекста данных в addrecordstomytable, даже если записи уже должны были быть удалены.

Я попытался обновить таблицу, но, похоже, это тоже не сработало.

Примечание. База данных поддержки - это ms sql server 10

Предложения?

1 Ответ

0 голосов
/ 07 мая 2011

Это не столько ответ, сколько техника устранения неполадок.Вы пытались использовать свойство журнала?то есть

j.log = Console.Out

Чтобы вы могли увидеть фактический сгенерированный SQL, чтобы убедиться, что это то, что вы ожидаете?Кроме этого, есть ли что-то релевантное в вашей тестовой настройке?Есть ли что-нибудь, управляющее транзакцией?Работают ли триггеры?С точки зрения последнего, если есть триггер, который запускается некоторое время, а затем удаление завершается, что может объяснить, что вы видите.Я предполагаю, что синтаксис LINQ варьируется между VB и C #, что меня удивило, потому что я не думаю, что ваш код сравнения, как написано, действителен в C #, вам понадобится ==, не =, для сравнения, но так как он работает, когда вы нарушаетеотладчик ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...