Wie aktualisiere ich ein Fremdschlüsselwert mit LINQ Objekt to Entities?
-
05-07-2019 - |
Frage
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 des Obst- und seinen Status in der Datenbank in diesen Situationen:?
- Aktualisieren Sie ein Stück Obst, das aus einem frühen L2E Anruf kam
- gegeben eine ganze Zahl mit dem FruitID entspricht (das heißt, ich nicht mit einem vollen Frucht Objekt in der Hand zu starten)
VB oder C # ist es gut, danke!
Lösung
Dies funktioniert aber nicht das, was ich hatte gehofft, für:
int StatusID = 4; // Some ID
Fruit.FruidIDReference.EntityKey =
New EntityKey("MyEntities.Statuses", "StatusID", StatusID)
Sicher gibt es einen sauberen Weg, dies zu tun, die nicht hart codierten Strings erfordern (was führt Laufzeitausnahmen, wenn ich einen Tippfehler).
Andere Tipps
Wenn ein Obst-Objekt an einem anderen Methode weitergegeben, können Sie:
-
Führen Sie einen Verweis auf das Kontextobjekt zusammen mit dem Obst und rufen Sie Savechanges ()
-
Machen Sie Ihre Änderungen an der Fruit-Objekt in der niedrigeren Stufe Methode und rufen Sie Savechanges () in der Rufmethode (können Sie überprüfen, um zu sehen, ob es wurde geändert, wenn Sie unnötige DB Anrufe zu vermeiden.)
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();