DevExpressContrib.Xpo.UpdateSchema works via reflection and database specific providers. The main class, UpdateSchema is where the update process starts.

When the UpdateSchema.Update method is called it first gets the provider associated with the connection string. It does this by reflecting over the DevExpressContrib.Xpo.UpdateSchema assembly and the DevExpressContrib.Xpo.UpdateSchema.Providers assembly. When a class decorated with an UpdateSchemaProvider attribute is found it is registered as a provider. The appropriate update schema provider is then created.

The UpdateSchema.Update method then iterates over all of the assemblies or list of types where persistent data can be found. When it encounters a class which descends from XPBaseObject it gathers all of the data needed to perform the update.

If there are no updates which need to be done, XPO UpdateSchema is called so that XPO can add new tables and columns. If there are updates to be done the UpdateItems method is called with a UpdateSchemaOrder.BeforeXpoSchemaUpdate parameter, then XPO UpdateSchema is called and finally UpdateItems method is called with a UpdateSchemaOrder.AfterXpoSchemaUpdate parameter.

There is no determined order in which the update items are processed.