Comment mettre à jour la valeur de clé étrangère d'un objet avec LINQ to Entities?
-
05-07-2019 - |
Question
Supposons que j'ai ces tableaux:
Fruits
- FruitID INT PK
- FruitName NVARCHAR(30)
- FruitStatusID INT FK: Statuses
Statuses
- StatusID INT PK
- StatusName NVARCHAR(30)
Comment puis-je mettre à jour le nom du fruit et son statut dans la base de données dans ces situations?:
- Mettre à jour un fruit provenant d'un précédent appel L2E
- étant donné un entier correspondant à FruitID (c’est-à-dire que je n’ai pas d’objet Fruit en entier pour commencer)
VB ou C # va bien, merci!
La solution
Cela fonctionne mais n’est pas ce que j’espérais:
int StatusID = 4; // Some ID
Fruit.FruidIDReference.EntityKey =
New EntityKey("MyEntities.Statuses", "StatusID", StatusID)
Il existe sûrement une manière plus simple de faire cela qui ne nécessite pas de chaînes de codage en dur (qui introduit des exceptions d'exécution si je fais une faute de frappe).
Autres conseils
Si un objet Fruit est transmis à une autre méthode, vous pouvez:
-
Passez une référence à l'objet context avec le fruit et appelez SaveChanges ()
-
Apportez vos modifications à l'objet Fruit dans la méthode de niveau inférieur et appelez SaveChanges () dans la méthode d'appel (vous pouvez vérifier s'il a été modifié si vous souhaitez éviter les appels de base de données inutiles.)
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();