Entity Framework SaveChanges() pas de mise à jour de la base de données
var paymentAttempt = _auctionContext.PaymentAttempts.Where(o => o.Id == paymentAttemptId).SingleOrDefault();
if (paymentAttempt != null)
{
paymentAttempt.PaymentAttemptStatusId = (int)PaymentAttemptStatus.Defunct;
paymentAttempt.PaymentAttemptStatus = _auctionContext.PaymentAttemptStatuses.Where(pas => pas.Id == paymentAttempt.PaymentAttemptStatusId).First();
var relevantWinningBidsTotalPrices = _auctionContext.GetWinningBidsTotalPricesForPaymentAttempt(paymentAttemptId).ToArray();
foreach (var winningBid in relevantWinningBidsTotalPrices)
{
winningBid.Locked = false;
_auctionContext.UpdateObject(winningBid);
}
_auctionContext.SaveChanges();
}
Dans le code ci-dessus après
_auctionContext.SaveChanges();
est appelé winningBid
est mis à jour comme prévu mais paymentAttempt
ne l'est pas. Pourquoi est-ce? C'est vraiment frustrant. Il n'y a pas d'erreur non plus. Je m'attends à une incapacité à se produire s'il y avait un problème comme EF n'était pas le suivi de l'objet ou quelque chose comme ça, mais pas une telle erreur se produit.
Utilisation Joindre pour obtenir votre nouvelle entité dans le contexte .Avant de vous enregistrer. Le contexte n'avait aucune idée de quoi vous parlez.
OriginalL'auteur Sachin Kainth | 2013-02-13
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous avez besoin pour passer le
paymentAttempt
objet à votre contexte, à savoir que c'est un objet qui doit être mis à jour.Par exemple, en supposant que
_auctionContext
est une instance deDbContext
:Une autre option est le
Attach
méthode:La version de l'entité cadre utilisez-vous?
4. Nous utilisons les Services de Données WCF sur EF.
Peut-être à l'aide de la
Attach
méthode de vérification de ma mise à jour de réponseOriginalL'auteur Jorge
Si vous n'avez pas
Entry
essayez d'ajouter:alors vous pouvez simplement utiliser:
OriginalL'auteur borzou27
Je suis tombé sur cette question, mais pour un problème différent. J'ai découvert que si vous appelez SaveChanges() sur un objet qui n'a pas été modifié, l'EF ne pas mettre à jour quoi que ce soit. Cela fait sens, mais j'avais besoin de la DB à être mis à jour afin que les autres utilisateurs de voir qu'un SaveChanges() a été exécuté, peu importe si tous les champs ont changé. Pour forcer une mise à jour sans changer les champs:
OriginalL'auteur smirkingman