Recherche…


Database.BeginTransaction ()

Plusieurs opérations peuvent être exécutées sur une seule transaction afin que les modifications puissent être annulées si l'une des opérations échoue.

using (var context = new PlanetContext())
{
    using (var transaction = context.Database.BeginTransaction())
    {
        try
        {
            //Lets assume this works
            var jupiter = new Planet { Name = "Jupiter" };
            context.Planets.Add(jupiter);
            context.SaveChanges();

            //And then this will throw an exception
            var neptune = new Planet { Name = "Neptune" };
            context.Planets.Add(neptune);
            context.SaveChanges();

            //Without this line, no changes will get applied to the database
            transaction.Commit();
        }
        catch (Exception ex)
        {
            //There is no need to call transaction.Rollback() here as the transaction object
            //will go out of scope and disposing will roll back automatically
        }
    }
}

Notez qu'il peut être une convention de développeur d'appeler explicitement transaction.Rollback() , car cela rend le code plus explicite. De plus, il peut exister des fournisseurs de requêtes (moins connus) pour Entity Framework qui Dipsose correctement Dipsose , ce qui nécessiterait également un appel explicite à transaction.Rollback() .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow