J'essaye d'implémenter un senario de suppression logique à travers toutes mes entités. Tous ont une propriété booléenne IsDeleted. Je voudrais également cascade l'association supprime aussi. J'ai commencé en ajoutant une méthode partielle pour l'entité au datacontext.Linq Logical Supprimer avec les associations
partial void DeleteQuestion(Question instance)
{
instance.IsDeleted = true;
ExecuteDynamicUpdate(instance);
foreach (var answer in instance.Answers)
{
DeleteAnswer(answer);
}
}
Ce génère une erreur Incorrect syntax near the keyword 'WHERE'
à ExecuteDynamicUpdate. En regardant sql profiler je peux voir la clause set est vide, il n'enregistre pas le IsDeleted = true;
comme un changement. J'ai vérifié l'événement IsDeletedChanging et il s'est déclenché mais je suppose que l'ensemble de modifications a déjà été construit à ce moment.
J'ai aussi essayé de soumettre les changements au lieu d'appeler ExecuteDynamicUpdate mais lève l'exception The operation cannot be performed during a call to SubmitChanges.
J'ai vu une discussion identique here avec la seule résolution étant d'utiliser des procédures stockées que je préfère ne pas faire.
Je pensais donc demander à la communauté SO et obtenir une bonne réponse en haut des résultats Google. Il semble y avoir peu sur ce sujet.
Merci beaucoup.
Un peu hors sujet, mais parcourir toutes les Réponses et les supprimer une par une va donner de très mauvaises performances. Vous devriez probablement regarder dans le lot en les supprimant à la place. –
Correct. Je vais refactoriser quand je trouve un moyen de faire la mise à jour. J'ai essayé oralement db.Answers.DeleteAllOnSubmit (instance.Answers) mais cela jette l'opération "ne peut pas être effectuée lors d'un appel à l'exception SubmitChanges" – madcapnmckay