Frage

Ich mag, wie sauber ein Objekt in RavenDB gespeichert ist, sondern eine praktische Frage, für die ich bin mir nicht sicher, ob die besten Antwort.

Hier können sagen, dass ich eine Preisanfrage haben:

QuoteRequest.cs

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

Quote.cs

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

, wenn jemand eine Seite trifft, spuckte ich aus einer Liste von Zitaten, aus denen sie wählen können. Diese Zitate sind nur mit einer Instanz von der Offertanfrag bezogen.

Meine Frage ist, da ein untergeordnetes Objekt, wie ein Zitat in der Liste, hat nicht einen Id von der Datenbank generiert hat, wie erstelle ich einen Abfragezeichenfolgeflag die nächste Seite wissen zu lassen, die zitieren die Benutzer kaufen wollen?

Es könnte mehrere Angebote von einem ProviderID sein.

Meine Gedanken wurden entweder ein QuoteId hinzufügen und erhöhen basierend auf this.Quotes.Count, aber das scheint ein wenig hacky, oder eine Zufallszahl erzeugen, auch ein wenig hacky.

Wie die Menschen im Allgemeinen so etwas wie dies umgehen?

War es hilfreich?

Lösung

Haben Sie wirklich brauchen, den Kauf zu verbinden (was die Benutzer zu kaufen gewählt haben) mit dem Original-Zitat? Ich vermute, dass Sie das Angebot nehmen und es dann zu einem Kauf konvertieren. Wenn das so ist, dann sorgen Sie sich nicht um eine ID überhaupt. Pass entlang nur die konstituierenden Werte zum nächsten Schritt. Mit anderen Worten, treat Zitat wie ein Wert in dem DDD Sinne.

Wenn Sie jedoch tun Notwendigkeit eine Assoziation mit dem Kauf zu speichern ... na ja, dann hängt es davon ab, was Sie wirklich Notwendigkeit verfolgen. Zum Beispiel könnten Sie nur die QuoteRequest aktualisieren, Kennzeichnung der ausgewählten Angebot. (Füge eine IsSelected oder etwas ähnliches wie das Zitat Klasse Zitat). Dann könnte der Kauf die Offertanfrag verknüpft wird zurück, und man konnte das Angebot anhand des Flags identifizieren.

Auch dies alles hängt vom Kontext ab (und ich bin nur Vermutungen darüber zu machen).

Andere Tipps

Da niemand diese noch nicht beantwortet hat werde ich nur sagen, wie ich es tun würde;

Warum ein Id überhaupt hinzufügen? benutzen Sie einfach den Index der Liste? Es ist der Wunsch ist? "Quote = 0" erhalten sie das Angebot an Position 0?

Nicht wirklich sicher, ob ich nicht etwas zu bekommen hier aber ...

Eine Option ist das übergeordnete Objekt speichert die zuletzt verwendete id haben. Wenn Sie ein neues Kind-Objekt Hinzufügen erhöhen Sie die ID-Zähler und das Kind hinzuzufügen. Wenn das Objekt gespeichert wird, der ID-Zähler wird automatisch erhöht.

Lassen Sie uns sagen Sie Blog-Beitrag mit Kommentaren haben:

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

...

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

session.SaveChanges();

Der obige Code möglicherweise nicht 100% richtig sein, aber sollen Sie eine Vorstellung davon, wie es zumindest zu tun!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top