Почему я получаю DuplicateKeyException в Linq2Sql после того, как проверил наличие ключей? - PullRequest
1 голос
/ 26 сентября 2011

У меня есть программа, которая добавляет много новых данных в базу данных, используя Linq2SQL.

Чтобы избежать исключений DuplicateKeyException, я проверяю наличие ключа, прежде чем пытаться добавить новое значение в базу данных.

На данный момент я не могу предоставить изолированный тестовый пример, но я максимально упростил код.

// newValue is created outside of this function, with data read from a file
// The code is supposed to either add new values to the database, or update existing ones

var entryWithSamePrimaryKey = db.Values.FirstOrDefault(row => row.TimestampUtc == newValue.TimestampUtc && row.MeterID == newValue.MeterID);
if (entryWithSamePrimaryKey == null)
{
    db.Values.InsertOnSubmit(newValue);
    db.SubmitChanges();
}
else if(entryWithSamePrimaryKey.VALUE != newValue.VALUE)
{
    db.Values.DeleteOnSubmit(entryWithSamePrimaryKey);
    db.SubmitChanges();
    db.Values.InsertOnSubmit(newValue);
    db.SubmitChanges();
}

Как ни странно, когда я смотрю на исключения в журнале приложений относительно того, какие элементы вызывают проблемы, я не могу найти ЛЮБЫЕ из них в базе данных.

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

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

1 Ответ

0 голосов
/ 26 сентября 2011

Если ошибка генерируется в блоке обновления, вы можете объединить объект в случае обновления, не удаляя entryWithSamePrimaryKey, но оценивая его со значением свойства newValue и затем сохраняя изменения.

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