Ваш пример кода не работает вообще.Основная проблема заключается в том, что вы не можете просто переключить ссылки и ожидать, что RavenDB распознает, что:
if (existing != null)
existing = current;
Вместо этого вы должны обновлять каждое свойство один за другим:
existing.Model = current.Model;
existing.Make = current.Model;
Таким способом вы можете облегчить отслеживание изменений в RavenDB и многих других средах (например, NHibernate).Если вы не хотите писать этот интересный фрагмент кода, я рекомендую использовать AutoMapper:
existing = Mapper.Map<Sale>(current, existing);
Другая проблема с вашим кодом заключается в том, что вы используете Session.Query, где вам следует использовать Session.Load. Помните: если вы запрашиваете документ по его идентификатору, вы всегда будете использовать Load! Основное отличие состоит в том, что один использует локальный кэш, а другой нет (то же самое относится к эквивалентным методам NHibernate).
Хорошо, теперь я могу ответить на ваш вопрос: если я вас правильно понимаю, вы хотите сохранить несколько экземпляров Sale в вашу базу данных, в то время как они должны быть либо добавлены, если они не существуют, либо обновлены, еслиони существовали.Правильно?Один из способов - исправить ваш пример кода с помощью приведенных выше советов и позволить ему работать.Однако это выдаст один ненужный запрос (Session.Load (существующий идентификатор)) для каждой итерации.Вы можете легко избежать этого, если настроите индекс, который выбирает все идентификаторы всех документов в вашей Sales-collection.Перед тем, как перейти к вашим элементам, вы можете загрузить все существующие идентификаторы.
Однако я хотел бы знать, что вы на самом деле хотите сделать.Какой у вас домен / сценарий использования?