Hide menu Last updated: Oct 12 2015

You can export and import meta-models. You also can compare two meta-models, which is useful during these operations.

The following classes referred are available in the Mediachase.BusinessFoundation.Data.Meta.Schema namespace.

Exporting meta-models

Export a meta-model to a file with the MetaModelGenerator class. By default, MetaModelGenerator exports all elements; use the SelectedElements property of the MetaModelGenerator class to export custom elements.

Example: Exporting a meta-model to a file

C#
// Create MetaModelGenerator
                MetaModelGenerator generator = new MetaModelGenerator();
                // Use generator.SelectedElements to export custom elements
                try
                {
                // Open DataContext
                DataContext.Current = new DataContext(connectionString);
                // Load Save Commands
                SchemaDocument schema = new SchemaDocument();
                schema.LoadDefault();
                generator.Schema = schema;
                // Load Save Commands
                XmlDocument xmlOutput = generator.Generate();
                xmlOutput.Save(filePath);
                }
                catch (Exception ex)
                {
                }

Comparing meta-models

Before you import a meta-model, you should compare meta-models and create synchronization commands. You can export and compare an existing meta-model with the one that you are about to import before actually importing it.

Example: Comparing two meta-models and create synchronization script

C#
try
                {
                // Load Imported Meta-Model
                List<ModuleManifest> installedModules = new List<ModuleManifest>();
                XmlDocument xmlSrcMetaModel = new XmlDocument();
                xmlSrcMetaModel.Load(srcMetaModelPath);

                // Load Modules From Source Meta-Model
                foreach (XmlNode xmlManifestNode in
                xmlSrcMetaModel.SelectNode("//mediachase.businessFoundation.data.meta/description/moduleManifests/moduleManifest"))
                {
                ModuleManifest manifest =
                McXmlSerializer.GetObject<ModuleManifest>(xmlManifestNode.OuterXml);
                installedModules.Add(manifest);
                }

                // Load SchemaDocument
                SchemaDocument schema = new SchemaDocument();
                schema.LoadDefault(installedModules.ToArray());

                // Load Original Meta-model
                XmlDocument xmlDestMetaModel = new XmlDocument();
                xmlDestMetaModel.Load(destMetaModelPath);

                // Compare two Meta-models
                SyncCommand\[] syncCommands = MetaModelSync.FindModifications(schema, xmlSrcMetaModel, xmlDestMetaModel);

                // Save sync commands to file
                McXmlSerializer.SaveObjectToFile<SyncCommand\[\]>(outputSyncFilePath, syncCommands);
                }
                catch (Exception ex)
                {
                }

Importing meta-models

When import a meta-model, follow these steps.

  1. Export the original meta-model.
  2. Compare it with the meta-model to be imported.
  3. Create synchronization commands (as described in the previous section).
  4. After you compare, execute the synchronization commands.

Example: Loading and executing synchronization commands

C#
try
                {
                // Open DataContext
                DataContext.Current = new DataContext(connectionString);

                // Load Sync Commands
                SchemaDocument schema = new SchemaDocument();
                schema.LoadDefault();

                // Load Sync Commands
                SyncCommand\[] syncCommands =
                McXmlSerializer.GetObjectFromFile<SyncCommand\[]>(filePath);

                // Apply Sync Command
                using (TransactionScope tran = DataContext.Current.BeginTransaction())
                {
                MetaModelSync.Execute(schema, syncCommands);

                tran.Commit();
                }
                }
                catch (Exception ex)
                {
                }

Comments