Frage

Wir haben eine Tabelle, die in etwa wie folgt aussieht:

CREATE TABLE Lockers 
{
  UserID int NOT NULL PRIMARY KEY (foreign key),
  LockerStyleID int (foreign key),
  NameplateID int (foreign key)
}

Alle Schlüssel beziehen sich auf andere Tabellen, sondern auch wegen der Art und Weise der Anwendung verteilt wird, ist es einfacher für uns IDs als Parameter zu übergeben entlang. So möchten wir dies tun:

Locker l = new Locker { 
  UserID = userID, 
  LockerStyleID = lockerStyleID, 
  NameplateID = nameplateID 
};
entities.AddLocker(l);

Wir könnten es in LINQ-to-SQL tun, aber nicht EF?

War es hilfreich?

Lösung

Das fehlende Feature scheint eine Menge Leute zu ärgern.

  • Gute Nachricht: MS wird das Problem mit .NET 4.0 Adresse
  • .
  • Bad news: für jetzt, oder wenn Sie auf 3.5 durchstochen haben Sie ein wenig Arbeit zu tun, aber es ist möglich
  • .

Sie haben es, wie dies zu tun:

Locker locker = new Locker();
locker.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", userID);
locker.LockerStyleReference.EntityKey = new EntityKey("entities.LockerStyle", "ID", lockerStyleID);
locker.NameplateReference.EntityKey = new EntityKey("entities.Nameplate", "ID", nameplateID);
entities.AddLocker(locker);
entities.SaveChanges();

Andere Tipps

Was ich getan habe, Dinge zu leicht zu machen, ist das Hinzufügen der Fremdschlüssel Eigenschaft selbst in der Teilklasse:

public int UserID
{
   get
   {
      if (this.User != null)
         return this.User.UserID;
   }
   set 
   {
      this.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", value);
   }
}

Sie können eine Erweiterungsmethode machen, die das Unternehmen baut auf der Grundlage dieser ID aus.

Mit einem EntityKey Ihr Problem löst;)

alk.

eine weitere Methode, wenn Sie nichts dagegen ‚verschmutzen‘ Sie DB-Schema ist eine berechnete Spalte hinzufügen, zum Beispiel wenn Sie hatte ein Fremdschlüsselfeld FK_Customer Sie eine neue berechnete Spalte FK_Customer_Computed definieren könnte, die die Expression FK_Customer hat. Wenn Sie erzeugen \ aktualisieren Sie Ihre edmx Modell wird das Feld wie ein normales Feld erscheinen, die Sie dann von Ihnen Entitätsobjekt verweisen können.

oder warten Sie auf EF4:)

Im Anschluss an Dylans Antwort hat Alex James einen Blog auf genau diese und erklärt, das Problem vollständig geschrieben und wie über die partielle Klasse + Eigenschaft Lösung gehen.

Faking Foreign Keys - EF3.5

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