protected static void GetBags(string outputNamespace, string tbl, Dictionary <string, List <ColumnMetadata> > hbmBags, bool hasNoPkAtAll, string className, XElement classXe) { //----hbm bags var hbmBagNames = new List <string>(); //check for duplicates if (Settings.DoNotReference.Contains(tbl) || !hbmBags.ContainsKey(tbl) || hasNoPkAtAll) { return; } var distinctBagConstraintNames = hbmBags[tbl].Select(x => x.constraint_name).Distinct().ToList(); foreach (var distinctBagConstraintName in distinctBagConstraintNames) { var hbmBagPropertyName = Compose.PropertyName(distinctBagConstraintName); var hbmBagXe = XeFactory.BagNode(hbmBagPropertyName, Globals.HbmXmlNames.ALL_DELETE_ORPHAN, bool.TrueString.ToLower(), bool.TrueString.ToLower(), Globals.REPRESENT_512); var bagColumns = hbmBags[tbl].Where(x => string.Equals(x.constraint_name, distinctBagConstraintName, Sorting.C)) .Select(x => x.column_name) .ToList(); string hbmOneToMany; if (bagColumns.Count > 1) { var hbmBagFirstKey = hbmBags[tbl].First( x => string.Equals(x.constraint_name, distinctBagConstraintName, Sorting.C)); if (Settings.DoNotReference.Contains(hbmBagFirstKey.table_name)) { continue; } hbmOneToMany = Compose.ClassName((hbmBagFirstKey.table_name), outputNamespace); var hbmBagFkKeyXe = XeFactory.KeyNodeClassName(className); foreach ( var columnData in hbmBags[tbl].Where( x => string.Equals(x.constraint_name, distinctBagConstraintName, Sorting.C)).ToList()) { columnData.CopyFrom(Sorting.GetFromAllColumnMetadata(columnData)); var fullColumnName = columnData.column_name; Compose.ValidSplit(fullColumnName, 3); var hbmBagKeyColumn = NfString.ExtractLastWholeWord(fullColumnName, null); var hbmBagKeyXe = XeFactory.ColumnNode(hbmBagKeyColumn, columnData.ToJsonString()); hbmBagFkKeyXe.Add(hbmBagKeyXe); } hbmBagXe.Add(hbmBagFkKeyXe); } else { var hbmBagFirstKey = hbmBags[tbl].First( x => string.Equals(x.constraint_name, distinctBagConstraintName, Sorting.C)); if (Settings.DoNotReference.Contains(hbmBagFirstKey.table_name)) { continue; } hbmBagFirstKey.CopyFrom(Sorting.GetFromAllColumnMetadata(hbmBagFirstKey)); var fullColumnName = hbmBagFirstKey.column_name; hbmOneToMany = Compose.ClassName((hbmBagFirstKey.table_name), outputNamespace); Compose.ValidSplit(fullColumnName, 3); var hbmBagKeyColumn = NfString.ExtractLastWholeWord(fullColumnName, null); var hbmBagKeyXe = XeFactory.KeyNodeColumnName(hbmBagKeyColumn, hbmBagFirstKey.ToJsonString()); hbmBagXe.Add(hbmBagKeyXe); } var hbmOneToManyXe = XeFactory.OneToManyNode(hbmOneToMany); hbmBagXe.Add(hbmOneToManyXe); //attempt to make the name plural var newBagName = Compose.BagPropertyName(hbmOneToMany); hbmBagXe.FirstAttribute.SetValue(newBagName); classXe.Add(hbmBagXe); hbmBagNames.Add(hbmBagPropertyName); } }