var dc = new DataContext();
var myItem = dc.Items.Single(x => x.Id == 12);
myItem.LastModifiedBy = "me";
myItem.LastModifiedDateTime = DateTime.Now;
// dc.SubmitChanges(); I don't want to do this!
dc.DeleteOnSubmit(myItem);
dc.SubmitChanges(); // does not perform the update
J'ai fait un changement à MyItem, et je veux que le changement à apporter à la base de données, à des fins de vérification. Je ne souhaite pas appeler SubmitChanges() deux fois. Je veux que cela se produise dans un seul appel à SubmitChanges(), pour profiter de la transaction implicite. Comment puis-je dire au DataContext de faire à la fois la mise à jour et la suppression? Le code fait seulement la suppression. Je sais que la mise à jour n'est pas appelée car le déclencheur de mise à jour de la table de base de données ne se déclenche pas. Le DataContext pense probablement que puisqu'il est marqué pour la suppression, il ne sert à rien de déranger avec la mise à jour.Comment puis-je faire une mise à jour et une suppression à une entité au sein d'un seul appel à SubmitChanges()
Des suggestions? Idéalement, cela signifierait ne pas avoir à utiliser une procédure stockée. De plus, je ne peux pas, pour diverses raisons, utiliser TransactionScope.
J'ai du mal à imaginer un scénario où il est logique de mettre à jour un élément et de le supprimer immédiatement. Juste pour ma propre édification, pouvez-vous faire allusion à un cas d'utilisation? – jason
Nous avons des déclencheurs qui s'exécutent sur les mises à jour, les insertions et les suppressions, et enregistrent ce qui a changé. Chaque table a LastModifiedBy. Si vous supprimez, vous obtenez le LastModifiedBy à partir de quand il a été modifié pour la dernière fois, ce qui aurait pu être il y a longtemps. Donc, en effectuant une mise à jour en premier et en mettant à jour la valeur LastModifiedBy, le déclencheur peut enregistrer la valeur LastModifiedBy à partir de l'élément supprimé, puis nous savons qui a effectué la suppression. – wozza
CREER TRIGGER [Item_DeleteTrigger] ON [dbo] [article] POUR SUPPRIMER AS BEGIN \t DECLARE @auditLogID INT. \t INSERT INTO AuditLog (ObjectName, Identificateur, AuditAction, CreatedBy, CreatedDateTime) \t SELECT 'objet', itemId, 'DEL', lastModifiedBy, LastModifiedDateTime \t DE supprimé; \t SELECT @auditLogID = @@ IDENTITY; \t INSERT INTO AuditLogEntry (AuditLogID, NomPropriété, OldValue, NewValue) \t SELECT @auditLogID, 'itemid', ItemId, null \t DE supprimé; FIN – wozza