Frage

Ich versuche, den besten Weg, um herauszufinden, eine einfache Eins-zu-viele-Beziehung in Linq2Sql zu speichern.

Nehmen wir an, wir folgende POCO-Modell (pseduo Code btw) haben:

Person hat null bis viele Vechicles.

class Person
{
    IList<Vehicle> Vehicle;
}

class Vehicle
{
    string Name;
    string Colour;
}

Nun, wenn ich eine Person zu speichern, gehe ich, dass poco Objekt in den Repository-Code (die L2S sein geschieht). Ich kann die Person Objekt fein speichern. Ich tue dies in der Regel.

using (Db db = new Db())
{
    var newPerson = db.People.SingleOrDefault(p => p.Id == person.Id) ?? new SqlContext.Person();
    // Left to right stuff.
    newPerson.Name = person.Name;
    newPerson.Age = person.Age;

    if (newPerson.Id <= 0)
        db.People.InsertOnSubmit(newPerson);
    db.SubmitChanges();
}

ich bin nicht sicher, wo und wie ich soll die Liste der Fahrzeuge der Person haben könnte umgehen? irgendwelche Vorschläge?

War es hilfreich?

Lösung

using (Db db = new Db())
{
    var newPerson = db.People.SingleOrDefault(p => p.Id == person.Id) ?? new SqlContext.Person();
    // Left to right stuff.
    newPerson.Name = person.Name;
    newPerson.Age = person.Age;

    // add vehicles.
    Vehicle firstV = new Vehicle();
    firstV.Name = "some name";
    firstV.Person = newPerson; // need to do this to set the person Id on the vehicle.
    newPerson.Vehicle.Add(firstV);
    // now when you save the Person it should save the Vehicle list 
    // if you set Cascade save update on the list. (not sure how to do that in L2S

    if (newPerson.Id <= 0)
        db.People.InsertOnSubmit(newPerson);
    db.SubmitChanges();
}

Jetzt können wählen Sie die Liste der Fahrzeuge auf einer anderen Ebene zu konstruieren, mit den Daten, die von der Schnittstelle kommen wird.

Aber Sie müssen sich daran erinnern, dass es nicht genug ist, um das Fahrzeug zu der Liste auf der Person Objekt hinzufügen, müssen Sie auch die Fahrzeuge Person Eigenschaft der Person fest, die die Fahrzeuge hat.

Beobachtung Ich bin darüber nicht sicher, aber wenn Sie das tun db.People.SingleOrDefault Sie könnten den ganzen Menschen Tabelle im Speicher werden geladen. Das ist nicht etwas, was Sie tun wollen. Berichtigt durch Slace in den Kommentaren.

Andere Tipps

Alles, was Sie tun müssen, ist sicherzustellen, dass es die entsprechenden Beziehungen innerhalb der Datenbank einrichten.

Wenn Sie Ihr Fahrzeug Tisch hat eine PersonId und es ist ein Fremdschlüssel zwischen ihnen, wenn man sie auf die DBML Linq zu SQL hinzufügen erkennt, dass es eine Beziehung zwischen ihnen ist und eine Table<T> Darstellung der Beziehung erstellen.

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