Трудно было выбрать правильный заголовок, но вот проблема:
У меня есть приложение с простой логикой, которое получает данные из TFS, перебирает «элементы» и обновляет локальную БД с помощью этих «Предметы".Вот фрагмент кода для обновления строки:
using (ResultDBDataContext local_db= new ResultDBDataContext())
{
DBTestResult dbRes = local_db.DBTestResults.getByPrimaryKey(args_supplied);
if (dbRes == null) {
dbRes = new DBTestResult(){//set properties}
local_db.DBTestResults.InsertOnSubmit(dbRes);
}
else{
dbRes.isDirty = true;
dbRes.otherPropertis = set_to_some_values;
}
local_db.SubmitChanges();
}
Это работает в программе Windows Console (импортировано> 100K строк, как это), что подтверждает правильность логики.Но когда я помещаю ту же логику в службу Windows (для тех же данных), через некоторое время (<2K строк) я получаю исключение SQL, говорящее «невозможно вставить дубликат ключа в таблицу».Обратите внимание, что я выполняю SubmitChanges () после обновления / вставки <strong>каждой строки
Я думаю, что это как-то связано с нижеследующим, но не смог выяснить причины:
- Как службы Windows обрабатывают подключения к БД.(Они объединяют? Они кэшируют данные? И т. Д.)
- Linq2SQL Dataconext, обрабатывающий его объекты обновления.(Какие свойства Linq2SQL Datacontext заставляют его вести себя по-разному в Windows Services?)
Любые идеи / предложения / ссылки / учебные пособия / статьи о том, как решить эту проблему или узнать больше информации о проблеме,очень приветствуется.
Спасибо.
Обновление : данные, поступающие из TFS, могут нарушать ограничение первичного ключа базы данных - но так как я вставляю / обновляю одну строку ввремя и фиксация изменений, последняя запись для того же первичного ключа будет находиться в базе данных.