Come aggiorno il valore della chiave esterna di un oggetto con LINQ alle entità?
-
05-07-2019 - |
Domanda
Supponiamo che io abbia queste tabelle:
Fruits
- FruitID INT PK
- FruitName NVARCHAR(30)
- FruitStatusID INT FK: Statuses
Statuses
- StatusID INT PK
- StatusName NVARCHAR(30)
Come posso aggiornare sia il nome di Fruit che il suo stato nel database in queste situazioni ?:
- Aggiorna un pezzo di Fruit proveniente da una precedente chiamata L2E
- dato un numero intero corrispondente al FruitID (ovvero, non ho in mano un oggetto Fruit completo per iniziare)
VB o C # va bene, grazie!
Soluzione
Funziona ma non è quello che speravo:
int StatusID = 4; // Some ID
Fruit.FruidIDReference.EntityKey =
New EntityKey("MyEntities.Statuses", "StatusID", StatusID)
Sicuramente c'è un modo più pulito per farlo che non richiede stringhe di codifica (che introduce eccezioni di runtime se faccio un refuso).
Altri suggerimenti
Se un oggetto Fruit viene passato a un altro metodo, puoi:
-
Passa un riferimento all'oggetto di contesto insieme a Fruit e chiama SaveChanges ()
-
Apporta le modifiche all'oggetto Fruit nel metodo di livello inferiore e chiama SaveChanges () nel metodo di chiamata (puoi verificare se è stato modificato se vuoi evitare inutili chiamate DB.)
Codice:
//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();