По умолчанию LINQ to SQL завершается неудачно при первой ошибке и откатывает транзакцию.Если вы хотите, чтобы он продолжал работать над чем угодно, вы можете передать перегрузку ConflictMode на SubmitChanges, чтобы позволить ему продолжать работу.В следующем примере из «LINQ в действии» пытается выполнить все обновления, поставленные в очередь, и затем вывести конфликты, возникшие при обработке ChangeConflictException.
try
{
context.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException)
{
var exceptionDetail =
from conflict in context.ChangeConflicts
from member in conflict.MemberConflicts
select new
{
TableName = GetTableName(context, conflict.Object),
MemberName = member.Member.Name,
CurrentValue = member.CurrentValue.ToString(),
DatabaseValue = member.DatabaseValue.ToString(),
OriginalValue = member.OriginalValue.ToString()
};
exceptionDetail.Dump();
}
Естественно, гораздо лучше быть активным и пытаться удалять только те записи, которые действительны, как показал Марк Сидаде.