This documentation is archived and is not being maintained.

ObjectContext.SavingChanges Event

Occurs when changes are saved to the data source.

Namespace:  System.Data.Objects
Assembly:  System.Data.Entity (in System.Data.Entity.dll)

public event EventHandler SavingChanges

The SavingChanges event is raised at the start of a SaveChanges operation on an ObjectContext. This event is typically used to validate changed objects before new values are written to the database.

This example is based on the Adventure Works Sales Model. This registers a handler for the SavingChanges event that performs entity state validation.

public class AdventureWorksProxy
    // Define the object context to be provided. 
    private AdventureWorksEntities contextProxy = 
        new AdventureWorksEntities();

    public AdventureWorksProxy() 
        // When the object is initialized, register the  
        // handler for the SavingChanges event.
            += new EventHandler(context_SavingChanges);

    // Method that provides an object context. 
    public AdventureWorksEntities Context
            return contextProxy;

    // SavingChanges event handler. 
    private void context_SavingChanges(object sender, EventArgs e)
        // Ensure that we are passed an ObjectContext
        ObjectContext context = sender as ObjectContext;
        if (context != null)

            // Validate the state of each entity in the context 
            // before SaveChanges can succeed. 
            foreach (ObjectStateEntry entry in 
                EntityState.Added | EntityState.Modified))
                // Find an object state entry for a SalesOrderHeader object.  
                if (!entry.IsRelationship && (entry.Entity.GetType() == typeof(SalesOrderHeader)))
                    SalesOrderHeader orderToCheck = entry.Entity as SalesOrderHeader;

                    // Call a helper method that performs string checking  
                    // on the Comment property.
                    string textNotAllowed = Validator.CheckStringForLanguage(

                    // If the validation method returns a problem string, raise an error. 
                    if (textNotAllowed != string.Empty)
                        throw new ApplicationException(String.Format("Changes cannot be "
                            + "saved because the {0} '{1}' object contains a "
                            + "string that is not allowed in the property '{2}'.", 
                            entry.State, "SalesOrderHeader","Comment"));

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5 SP1