У меня есть программа, которая добавляет много новых данных в базу данных, используя 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();
}
Как ни странно, когда я смотрю на исключения в журнале приложений относительно того, какие элементы вызывают проблемы, я не могу найти ЛЮБЫЕ из них в базе данных.
Я подозреваю, что это происходит в коде обновления, поэтому элементы удаляются из базы данных, но не добавляются снова.
Я обновлю свой код, чтобы предоставить больше информации, а затем обновлю этот пост соответствующим образом.