RavenDB ID для дочерних документов - PullRequest
4 голосов
/ 19 января 2011

Мне нравится, насколько чисто объект хранится в ravenDB, но у меня есть практический вопрос, на который я не уверен в лучшем ответе.

Допустим, у меня есть запрос цитаты:

QuoteRequest.cs

int Id;
dateTime DateCreated;
List<Quotes> Quotes;

Quote.cs

int ProviderId;
int Price;
int ServiceDays;
int ServiceTypeId;

когда кто-то заходит на страницу, я выкладываю список цитат, из которых они могут выбирать.Эти цитаты относятся только к экземпляру запроса цитаты.

Мой вопрос заключается в том, что, поскольку дочерний объект, такой как кавычка в списке, не имеет идентификатора, сгенерированного базой данных, как мне сгенерировать строку запроса, чтобы на следующей странице было известно, какую цитату хочет пользователькупить?

У одного провайдера может быть несколько кавычек.

Мои мысли были либо добавить QuoteId и увеличить его на основе this.Quotes.Count, но это выглядит немного странно, либо сгенерировать случайныйномер, тоже немного хакерский.

Как люди обычно справляются с чем-то подобным?

Ответы [ 3 ]

2 голосов
/ 18 марта 2011

Вам действительно нужно связать покупку (что пользователь выбрал для покупки) с оригинальной цитатой?Я предполагаю, что вы берете цитату, а затем конвертируете ее в покупку.Если это так, тогда вообще не беспокойтесь об идентификаторе.Просто передайте составляющие значения к следующему шагу.Другими словами, рассматривайте котировку как значение в смысле DDD.

Однако, если вам нужно необходимо сохранить связь с покупкой ... ну, тогда это зависит от того, что выдействительно нужно для отслеживания.Например, вы можете просто обновить QuoteRequest, отмечая выбранную цитату.(Добавьте IsSelected или что-то похожее на класс цитаты Quote.) Затем можно связать покупку с запросом котировки, и вы можете идентифицировать квоту с помощью флагов.

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

1 голос
/ 09 февраля 2011

Поскольку никто еще не ответил на этот вопрос, я просто скажу, как я это сделаю;

Зачем вообще добавлять Id?просто использовать индекс списка?Если запрос "? Quote = 0", они получают цитату в позиции 0?

Не совсем уверен, что если я не получаю что-то здесь ...

0 голосов
/ 01 мая 2013

Один из вариантов - сохранить в родительском объекте последний использованный идентификатор. При добавлении нового дочернего объекта вы увеличиваете счетчик идентификаторов и добавляете его к дочернему объекту. При сохранении объекта счетчик идентификаторов автоматически увеличивается.

Допустим, у вас есть запись в блоге с комментариями:

public class Post
{
  public int NextCommentId;
  public List<Comment> Comments;
  ...
}

...

var comment = new Comment { Id = post.NextCommentId++ };
post.Comments.Add(comment);

session.SaveChanges();

Приведенный выше код может быть не на 100% правильным, но должен дать вам представление о том, как это сделать, по крайней мере!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...