ObjectContext.SaveChanges Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Rend toutes les mises à jour persistantes dans la source de données.
Surcharges
SaveChanges() |
Rend toutes les mises à jour persistantes dans la source de données et réinitialise le suivi des modifications dans le contexte de l'objet. |
SaveChanges(Boolean) |
Obsolète.
Rend toutes les mises à jour persistantes dans la source de données et réinitialise éventuellement le suivi des modifications dans le contexte de l'objet. |
SaveChanges(SaveOptions) |
Rend persistantes toutes les mises à jour de la source de données avec le SaveOptions spécifié. |
SaveChanges()
Rend toutes les mises à jour persistantes dans la source de données et réinitialise le suivi des modifications dans le contexte de l'objet.
public:
int SaveChanges();
public int SaveChanges ();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer
Retours
Nombre d'objets à l'état Added, Modified ou Deleted lorsque la méthode SaveChanges() a été appelée.
Exceptions
Une violation d'accès concurrentiel optimiste s'est produite dans la source de données.
Exemples
Cet exemple tente d'enregistrer des modifications, ce qui peut provoquer un conflit d'accès concurrentiel. Ensuite, il montre comment résoudre le conflit d'accès concurrentiel en actualisant le contexte de l'objet avant de réenregistrer les modifications.
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
try
{
// Perform an operation with a high-level of concurrency.
// Change the status of all orders without an approval code.
ObjectQuery<SalesOrderHeader> orders =
context.SalesOrderHeaders.Where(
"it.CreditCardApprovalCode IS NULL").Top("100");
foreach (SalesOrderHeader order in orders)
{
// Reset the order status to 4 = Rejected.
order.Status = 4;
}
try
{
// Try to save changes, which may cause a conflict.
int num = context.SaveChanges();
Console.WriteLine("No conflicts. " +
num.ToString() + " updates saved.");
}
catch (OptimisticConcurrencyException)
{
// Resolve the concurrency conflict by refreshing the
// object context before re-saving changes.
context.Refresh(RefreshMode.ClientWins, orders);
// Save changes.
context.SaveChanges();
Console.WriteLine("OptimisticConcurrencyException "
+ "handled and changes saved");
}
foreach (SalesOrderHeader order in orders)
{
Console.WriteLine("Order ID: " + order.SalesOrderID.ToString()
+ " Order status: " + order.Status.ToString());
}
}
catch (UpdateException ex)
{
Console.WriteLine(ex.ToString());
}
}
Remarques
Pour vous assurer que les objets sur le client ont été mis à jour par la logique de la source de données, vous pouvez appeler la méthode Refresh avec la valeur StoreWins après avoir appelé SaveChanges. Pour plus d’informations, consultez Enregistrement des modifications et Gestion de la concurrence.
SaveChanges opère au sein d’une transaction. SaveChanges restaure cette transaction et lève une exception si l’un des objets sales ObjectStateEntry ne peut pas être conservé.
Si une violation d'accès concurrentiel optimiste s'est produite, une exception OptimisticConcurrencyException est levée. Vous pouvez résoudre une violation d'accès concurrentiel optimiste en l'interceptant, en appelant la méthode Refresh avec la valeur StoreWins ou ClientWins et en appelant de nouveau SaveChanges. Pour plus d’informations, consultez Guide pratique pour gérer la concurrence des données dans le contexte d’objet.
Voir aussi
S’applique à
SaveChanges(Boolean)
Attention
Use SaveChanges(SaveOptions options) instead.
Rend toutes les mises à jour persistantes dans la source de données et réinitialise éventuellement le suivi des modifications dans le contexte de l'objet.
public:
int SaveChanges(bool acceptChangesDuringSave);
public int SaveChanges (bool acceptChangesDuringSave);
[System.ComponentModel.Browsable(false)]
[System.Obsolete("Use SaveChanges(SaveOptions options) instead.")]
public int SaveChanges (bool acceptChangesDuringSave);
member this.SaveChanges : bool -> int
[<System.ComponentModel.Browsable(false)>]
[<System.Obsolete("Use SaveChanges(SaveOptions options) instead.")>]
member this.SaveChanges : bool -> int
Public Function SaveChanges (acceptChangesDuringSave As Boolean) As Integer
Paramètres
- acceptChangesDuringSave
- Boolean
Ce paramètre est nécessaire pour la prise en charge des transactions côté client. S'il a la valeur true
, le suivi des modifications de tous les objets est réinitialisé une fois que l'exécution de la méthode SaveChanges(Boolean) est terminée. S'il a la valeur false
, vous devez appeler la méthode AcceptAllChanges() après SaveChanges(Boolean).
Retours
Nombre d'objets à l'état Added, Modified ou Deleted lorsque la méthode SaveChanges() a été appelée.
- Attributs
Exceptions
Une violation d'accès concurrentiel optimiste s'est produite.
Remarques
Appelez la méthode à la SaveChanges(SaveOptions) place.
S’applique à
SaveChanges(SaveOptions)
Rend persistantes toutes les mises à jour de la source de données avec le SaveOptions spécifié.
public:
virtual int SaveChanges(System::Data::Objects::SaveOptions options);
public virtual int SaveChanges (System.Data.Objects.SaveOptions options);
abstract member SaveChanges : System.Data.Objects.SaveOptions -> int
override this.SaveChanges : System.Data.Objects.SaveOptions -> int
Public Overridable Function SaveChanges (options As SaveOptions) As Integer
Paramètres
- options
- SaveOptions
Valeur SaveOptions qui détermine le comportement de l'opération.
Retours
Nombre d'objets à l'état Added, Modified ou Deleted lorsque la méthode SaveChanges() a été appelée.
Exceptions
Une violation d'accès concurrentiel optimiste s'est produite.
Remarques
Utilisez cette surcharge spécifique de SaveChanges pour vous assurer que est appelé avant d’enregistrer DetectChanges les modifications apportées à la source de données ou qu’il est appelé après avoir AcceptAllChanges enregistré les modifications apportées à la source de données.
Cette énumération a un FlagsAttribute qui permet une combinaison au niveau du bit de ses valeurs membres.
Pour vous assurer que les objets du client ont été mis à jour par la logique côté source de données, vous pouvez appeler la Refresh méthode avec la StoreWins valeur après avoir appelé SaveChanges. La SaveChanges méthode fonctionne dans une transaction. SaveChanges restaure cette transaction et lève une exception si l’un des objets sales ObjectStateEntry ne peut pas être conservé.
Si une violation d'accès concurrentiel optimiste s'est produite, une exception OptimisticConcurrencyException est levée. Vous pouvez résoudre une violation d'accès concurrentiel optimiste en l'interceptant, en appelant la méthode Refresh avec les valeurs StoreWins ou ClientWins, puis en appelant de nouveau la méthode SaveChanges. Pour plus d’informations, consultez Guide pratique pour gérer la concurrence des données dans le contexte d’objet.