private void ProcessPrimaryKey(MetaInfoTable table) { metaProvider.GetPrimaryKey(table); if (table.PrimaryKey != null) { XmlNode pkNode = md.CreateElement("PrimaryId"); if (table.PrimaryKey.Columns.Count > 1) { md.AddAttribute("name", table.PrimaryKey.Name); } md.AddAttribute("persistentName", table.PrimaryKey.PersistentName); foreach (MetaInfoColumn col in table.PrimaryKey.Columns) { md.CreateElement("OnAttribute"); md.AddAttribute("name", col.Name); pkNode.AppendChild(md.CurrentNode); } // Try to attach generator by name if (table.PrimaryKey.Columns.Count == 1) { IMacroExpander macro = Genie.Config.Macro.CreateChild(); macro.SetMacro("%TABLE%", table.Name); string generatorTemplate = PersistenceLayerConfig.NamingConvention.Params.ValueByName("Generator.Template", "%TABLE%"); MetaInfoGenerator gen = Generators.FindByName(table.Schema, macro.Subst(generatorTemplate), false); if (gen == null) { macro.SetMacro("%TABLE%", table.PersistentName); gen = Generators.FindByPersistentName(table.PersistentSchema, macro.Subst(generatorTemplate), false); } if (gen != null) { md.CurrentNode = pkNode; md.AddAttribute("generator", gen.Name); gen.Node = md.Document.DocumentElement.RemoveChild(gen.Node); md.Document.DocumentElement.InsertBefore(gen.Node, table.Node); } } table.Node.AppendChild(pkNode); } }
public void GetGenerators(MetaInfoGenerators generators) { generators.Clear(); foreach (DataRow row in SelectData(GetGeneratorsSql()).Rows) { MetaInfoGenerator gen = new MetaInfoGenerator(); gen.PersistentSchema = row[SqlColName_Schema].ToString(); gen.PersistentName = row[SqlColName_Name].ToString(); gen.Schema = Importer.Naming.Convert(gen.PersistentSchema); gen.Name = Importer.Naming.Convert(gen.PersistentName); gen.MinValue = row[SqlColName_GeneratorMinValue].ToString(); gen.MaxValue = row[SqlColName_GeneratorMaxValue].ToString(); gen.Increment = row[SqlColName_GeneratorIncrement].ToString(); gen.Type = (GeneratorType)int.Parse(row[SqlColName_GeneratorType].ToString()); gen.Schema = Importer.Naming.Convert(gen.PersistentSchema); gen.Name = Importer.Naming.Convert(gen.PersistentName); generators.Add(gen); Logger.TraceLine("Generator {0} imported", gen.FullPersistentName); } Logger.ProgressStep(); }