Question

J'aime la façon proprement un objet est stocké dans RavenDB, mais une question pratique pour laquelle je ne suis pas sûr de la meilleure réponse.

Disons que j'ai une demande de devis:

QuoteRequest.cs

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

Quote.cs

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

quand quelqu'un frappe une page, je recrache une liste de citations dont ils peuvent choisir. Ces citations ne sont liées à une instance de la demande de devis.

Ma question est, depuis un objet enfant, comme une citation dans la liste, ne marche pas avoir un identifiant généré par la base de données, comment puis-je générer un querystring de laisser savoir page suivante qui cite l'utilisateur souhaite acheter?

Il pourrait y avoir plusieurs citations par un ProviderId.

Mes pensées ajouter soit une QuoteId et incrémenter basé sur this.Quotes.Count, mais qui semble un peu hacky, ou générer un nombre aléatoire, aussi un peu hacky.

Comment les gens gèrent généralement quelque chose comme ça?

Était-ce utile?

La solution

Avez-vous vraiment besoin d'associer l'achat (ce que l'utilisateur a choisi d'acheter) avec la citation originale? Je devine que vous prenez la citation puis le convertir en un achat. Si tel est le cas, alors ne vous inquiétez pas une carte d'identité du tout. Il suffit de transmettre les valeurs de constituants à l'étape suivante. En d'autres termes, traiter citation comme une valeur dans le sens de DDD.

Cependant, si vous faire nécessité de stocker une association à l'achat ... eh bien, il dépend de ce que vous avez vraiment besoin pour suivre. Par exemple, vous pouvez simplement mettre à jour le QuoteRequest, marquant la citation sélectionnée. (Ajouter un IsSelected ou quelque chose de similaire à la citation de la classe de citation.) Ensuite, l'achat pourrait être lié revenir à la demande de devis, et vous pouvez identifier la citation par des drapeaux.

Encore une fois, tout cela dépend du contexte (et je fais juste des suppositions à ce sujet).

Autres conseils

Puisque personne n'a répondu à cette mais je vais juste dire comment je le ferais;

Pourquoi ajouter un identifiant du tout? il suffit d'utiliser l'index de la liste? Il la demande est "? Quote = 0" ils obtiennent la citation à la position 0?

Pas vraiment sûr si je ne reçois pas quelque chose que ...

L'une des options est d'avoir le magasin d'objets parent le dernier identifiant utilisé. Lors de l'ajout d'un nouvel objet enfant que vous incrémenter l'ID-compteur et d'ajouter que, pour l'enfant. Lorsque l'objet est enregistré l'id-compteur est automatiquement incrémenté.

Disons que vous avez de blog avec des commentaires:

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

...

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

session.SaveChanges();

Le code ci-dessus pourrait ne pas être 100% correct, mais devrait vous donner une idée de la façon de le faire au moins!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top