Ich möchte eine neue Zeile in meiner Datenbank für eine Tabelle erstellen, die eine Reihe von Fremdschlüsselbeziehungen hat, und ich konnte nicht herausfinden, welche Reihenfolge und welche Aufrufe vorgenommen werden müssen. Das ist, was ich habe, so weit:Wie erstellt man Fremdschlüsselbeziehungen mit dem Entity Framework?
db.Models.Order order = DB.Models.Order.CreateOrder(apple);
order.CustomerReference.Attach((from c in db.Customer where c.Id == custId select c).First());
db.SaveChanges();
Der Code wird in der zweiten Zeile andernfalls, nämlich:
Attach ist keine gültige Operation, wenn das Quellobjekt mit diesem verknüpften Ende zugeordnet ist in einem hinzugefügten, gelöschten, oder abgelösten Zustand. Objekte geladen mit der NoTracking Merge-Option sind immer getrennt.
Irgendwelche Ideen?
ich nicht Ihre Lösung nach etwas dagegen hätte, aber ich möchte Namen stark typisierten Datenbankspalte verwenden, so kann ich Compiler-Fehler erhalten wenn die Beziehung ungültig ist. – Jared
Ich stimme mit kirkmphspherson überein, sein Weg vermeidet die zusätzliche SELECT. Ich schätze, Sie schätzen wartbaren Code über die Leistung. Sie können immer noch seinen Weg verwenden, aber anstelle von fest codierten Strings können Sie Reflektion verwenden, um die Strings zu generieren, indem Sie im obigen Beispiel die Klassennamen für ModelsEntities und Customers abrufen. Auf diese Weise erhalten Sie sowohl einen SELECT-Fehler als auch starke Tipp-/Kompilierzeitfehler. Der zusätzliche Aufwand aus der Reflektion sollte kein Problem IMO sein. – jamiebarrow
Okay, Sie können Reflektion verwenden, um den Namen des Entitätssatzes zu generieren, aber nicht den Schlüsselnamen (d. H. Kann "ModelsEntities.Customers" mit starker Typisierung erzeugen). Gibt es eine Möglichkeit, die "Id" mittels Reflektion zu generieren? – jamiebarrow