J'avais utilisé La réponse de Ladislav Mrnka Je suis cependant en train de poster ici parce que je l'ai mal utilisé (c'est-à-dire que je l'ai utilisé là où il n'était pas nécessaire) et j'ai pensé poster mes résultats ici au cas où des personnes chercheraient à "résoudre" le problème que j'avais.
Considérons un objet Order qui a une relation de clé étrangère avec Customer. Lorsque j'ai ajouté un nouveau client et une nouvelle commande en même temps, j'ai fait quelque chose comme ceci ;
var customer = new Customer(); //no Id yet;
var order = new Order(); //requires Customer.Id to link it to customer;
context.Customers.Add(customer);
context.SaveChanges();//this generates the Id for customer
order.CustomerId = customer.Id;//finally I can set the Id
Cependant, dans mon cas, cela n'était pas nécessaire car j'avais une relation de clé étrangère entre customer.Id et order.CustomerId.
Tout ce que j'avais à faire, c'était ça ;
var customer = new Customer(); //no Id yet;
var order = new Order{Customer = customer};
context.Orders.Add(order);
context.SaveChanges();//adds customer.Id to customer and the correct CustomerId to order
Maintenant, lorsque je sauvegarde les modifications, l'identifiant généré pour le client est également ajouté à la commande. Je n'ai pas besoin de ces étapes supplémentaires
Je suis conscient que cela ne répond pas à la question initiale, mais j'ai pensé que cela pourrait aider les développeurs qui ne connaissent pas EF à ne pas utiliser la réponse la plus votée pour quelque chose qui n'est peut-être pas nécessaire.
Cela signifie également que les mises à jour sont effectuées en une seule transaction, ce qui permet d'éviter les données orphelines (soit toutes les mises à jour sont effectuées, soit aucune ne l'est).
2 votes
Si vous n'avez besoin que de l'identifiant pour l'utiliser dans une relation de clé étrangère, vous pouvez envisager de simplement définir la propriété de navigation de votre entité dépendante sur l'entité précédemment ajoutée. De cette façon, vous n'avez pas à vous soucier d'appeler
SaveChanges
tout de suite, juste pour avoir l'identité. Autres lectures aquí .0 votes
Pour Entity Framework Core 3.0, ajoutez le paramètre acceptAllChangesOnSuccess comme true : await _context.SaveChangesAsync(true) ;