Wie aktualisiere ich den Fremdschlüsselwert eines Objekts mit LINQ in Entitäten?

Angenommen, ich habe diese Tabellen:

Fruits
 - FruitID       INT PK
 - FruitName     NVARCHAR(30)
 - FruitStatusID INT FK: Statuses

Statuses
 - StatusID      INT PK
 - StatusName    NVARCHAR(30)

Wie aktualisiere ich sowohl den Namen der Frucht als auch ihren Status in der Datenbank in diesen Situationen?:

  1. Aktualisieren Sie ein Stück Obst, das von einem früheren L2E-Aufruf
  2. stammt, der eine ganzzahlige Zahl erhält, die der FruitID entspricht (d. h., ich habe kein vollständiges Fruchtobjekt in der Hand, um mit zu beginnen)

ist dank"

Antwort auf "Wie aktualisiere ich den Fremdschlüsselwert eines Objekts mit LINQ in Entitäten? " 2 von antworten

This works but isn't what I was hoping for: ist aber nicht das, was ich mir erhofft hatte:

int StatusID = 4; // Some ID
Fruit.FruidIDReference.EntityKey = 
    New EntityKey("MyEntities.Statuses", "StatusID", StatusID)

Sicherlich gibt es eine sauberere Möglichkeit, dies zu tun, die keine hard-coding Strings erfordert (was Laufzeitausnahmen einführt, wenn ich einen Tippfehler mache).

Wenn ein Fruit-Objekt an eine andere Methode weitergegeben wird, können Sie:

  1. einen Verweis auf das Kontextobjekt zusammen mit dem Fruit übergeben und SaveChanges()

  2. Aufrufen von SaveChanges()

  3. Ihre Änderungen am Fruit-Objekt in der Downlevel-Methode vornehmen und SaveChanges() in der aufrufenden Methode aufrufen (Sie können überprüfen, ob es geändert wurde, wenn Sie unnötige DB-Aufrufe vermeiden möchten).

Code:

//Change the name
FruitEntities fe = new FruitEntities();
Fruit f = fe.Friuts.First();
f.FruitName = "NewName";
fe.SaveChanges();

//Get a fruit by ID and change the status
//Statuses will need to be included as an Entity in your model with an association to Fruits
int Id = 2;
int newStatusID = 0;
FruitEntities fe = new FruitEntities();
Fruit f = (from x in fe.Fruits
           where x.FruitID == Id
           select x).First();
Status s = (from y in fe.Statuses
            where y.StatusID = newStatusID
            select y).First();
f.Status = s;
fe.SaveChanges();