J'ai créé une méthode d'extensibilité pour supprimer un de mes objets Linq To Sql appelé Reservation.LINQ to SQL - Mise à jour des objets de contexte de données dans des classes partielles
Eh bien, dans cette méthode partielle que j'ai créée, je veux mettre à jour d'autres objets. Je ne peux pas sembler obtenir la mise à jour pour être persisté dans la base de données. Voici ma méthode partielle pour supprimer la réservation.
public partial class LawEnforcementDataContext
{
partial void DeleteReservation(Reservation instance)
{
// Get ID's of those seated in course
var roster = new Roster(this, instance.CourseID);
var seated = from r in roster.All
where r.WaitingList == false
select r.ID;
// delete the reservation
this.ExecuteDynamicDelete(instance);
// get seated id's not in original seated ids
var newlySeated = from r in roster.All
where r.WaitingList == false && !seated.Contains(r.ID)
select r.ID;
var reservations = this.Reservations.Where(r => newlySeated.Contains(r.ID));
foreach (var r in reservations)
{
r.Confirmed = false;
// Have tried doing nothing, thinking calling code's db.SubmitChanges() would do the trick
//this.ExecuteDynamicUpdate(r); HAVE TRIED THIS
}
//this.SubmitChanges(); HAVE TRIED THIS
}
}
La suppression a lieu mais la mise à jour ne l'est pas. Commenté dans les dernières lignes sont certaines des choses que j'ai essayé.
Des idées? Merci!
EDIT
Voici ce que je l'ai fait pour résoudre ce:
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{
ChangeSet delta = GetChangeSet();
foreach (var res in delta.Deletes.OfType<Reservation>())
{
// Get ID's of those seated in course
var roster = new Roster(this, res.CourseID);
var seated = from r in roster.All
where r.WaitingList == false
select r.ID;
base.SubmitChanges(failureMode);
// get seated id's not in original seated ids
var newlySeated = from r in roster.All
where r.WaitingList == false && !seated.Contains(r.ID)
select r.ID;
var reservations = this.Reservations.Where(r => newlySeated.Contains(r.ID));
foreach (var r in reservations)
{
r.Confirmed = false;
}
}
base.SubmitChanges(failureMode);
}
J'ai besoin que la suppression de la réservation ait lieu dans la boucle foreach. Est-ce que je dois encore appeler GetChangeSet() après avoir fait la suppression? –
Si vous le supprimez simplement logiquement, il devrait être supprimé lors de l'appel de base.SubmitChanges(); Fondamentalement, SubmitChanges appelle GetChangeSet en interne, et il devrait maintenant avoir quelques suppressions supplémentaires à faire ... –
Si cela ne suffit pas ... hmmm ... ne sais pas. –