RavenDB назначает уже использованный идентификатор документу

У меня есть файл excel, содержащий список учетных записей пользователей. У меня также есть способ импортировать эти учетные записи пользователей и сохранять их в RavenDB. В файле excel я сохраняю идентификатор объекта UserAccount (useraccounts/55). RavenDB не присваивает значение, я присваиваю его. Мой импорт работает отлично.

Однако,

Позже я пытаюсь сохранить новый UserAccount через панель администратора, используя следующий метод:

       [HttpPost]
            public ActionResult Create(UserAccountViewModel input)
            {
               // Validation omitted             

                    var model = new UserAccount()
                    {
                        Email = input.Email,
                        FirstName = input.FirstName,
                        LastName = input.LastName,
                        Phone = input.Phone,
                        Username = input.Username,
                        AuthorizeNetCustomerProfileId = customer.ProfileID,
                        Password = input.Password,

                    };

                    Raven.Store(model);
                    Raven.SaveChanges();
                    return RedirectToAction("Index");
             }

Когда я звоню

Raven.Store(model) 

Он присваивает идентификатор новому объекту UserAccount, но он начинается с 1. Поэтому при первой попытке сделать это он присваивает UserAccounts/1 моему новому UserAccount. Проблема в том, что UserAccounts/1 уже существует из моего импорта, поэтому, когда я вызываю сохранение изменений, я получаю исключение etag.

Когда я снова запускаю метод, он назначает UserAccounts/2 и так далее? Идеи?


person Brett Allred    schedule 29.01.2013    source источник


Ответы (1)


Самый простой способ - иметь строковое свойство Id в вашем классе UserAccount и присвоить ему значение «UserAccounts/». Эта завершающая косая черта попросит RavenDB присвоить ему идентификатор, используя процесс, аналогичный идентификации, вместо HiLo. Это несколько медленнее, но это сработает.

Лучший способ решить эту проблему — изменить документы HiLo на сервере, чтобы они начинались с первого доступного диапазона, но это более беспорядочно.

person synhershko    schedule 29.01.2013
comment
Так что первое предложение не сработало. Итак, я пошел и отрегулировал документ HiLo на сервере в соответствии с вашим вторым предложением, и это исправило его. Я думаю, что после импорта я просто создам документ HiLo в коде, и поэтому он знает, с чего начать. - person Brett Allred; 29.01.2013
comment
Первый должен был сработать - вам нужно сделать это до того, как вы вызовете Store для объекта, и я думаю, что вы можете передать его как параметр самому Store. - person synhershko; 29.01.2013