Изменение определенного элемента во вложенной коллекции в RavenDB - PullRequest
3 голосов
/ 12 ноября 2011

У меня есть нечто, похожее на следующую структуру документа:

public class Document {
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Property> Properties { get; set; }
}

public class Property {
    public int Id { get; set; }
    public string Name { get; set; }
}

Теперь запрашивать и изменять документы легко.Но мне нужно получить доступ к конкретным экземплярам Property в моем приложении, и кажется, что они не получат автоматически идентификатор, как корневой документ.И, похоже, это сделано в RavenDB.

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

from property in document.Properties 
where property.Id == someId
select property

... который, очевидно, не будет работать, пока

  • RavenDB не устанавливает поле Id автоматически или
  • Я сам не создаю механизм генерации идентификаторов

Я иду по неверному пути, или я пытаюсь понять, что я пытаюсь сделать?Должен ли я переместить свойства в корневой узел и сделать ссылку на них в документе?Или я должен просто сделать что-то подобное при вставке свойств:

  1. Получить документ со списком свойств
  2. Получить свойства [последний] ID
  3. Добавить1 и введите новый идентификатор самостоятельно в новых свойствах

?

Однако для этого потребуется по крайней мере два запроса (один для получения существующих свойств, другой для сохранения изменений) к базе данных, что кажется грязным и ненужным для такой, казалось бы, простой задачи.

Я нашел много подобных сообщений, но ни один из них не отвечает на этот AFAIK.

1 Ответ

1 голос
/ 12 ноября 2011
...