private void WireSets() { foreach (string tableToWire in FkForTables.Keys) { logger.Debug(string.Format("{0} working on:", GetType().Name) + tableToWire); Dictionary <string, int> multicolls = new Dictionary <string, int>(); var kinfo = FkForTables[tableToWire]; foreach (var key in kinfo.Keys) { var kdef = kinfo[key]; ITableMetadata ptable = GetPrimaryTable(kdef); ITableMetadata ctable = GetForeignTable(kdef); if (null != ptable) { var collectingClass = context.Model.GetClassFromTableName(ptable.Name); var collectedClass = context.Model.GetClassFromTableName(ctable.Name); if (null == collectedClass) { logger.Warn(string.Format("Not included table {0} could not be used in a collection", ctable.Name)); } if (null == collectingClass) { logger.Warn(string.Format("Target table for a collection of {0} is not included", ptable.Name)); } if (null != collectedClass && null != collectingClass) { if (!multicolls.ContainsKey(collectedClass.name)) { multicolls[collectedClass.name] = 0; } set s = new set(); s.inverse = true; context.Model.AddCollectionToEntity(collectingClass.name, s); s.table = collectedClass.table; s.name = context.NamingStrategy.GetNameForCollection(collectedClass.name, multicolls[collectedClass.name]); s.key = GenerateCollectionKey(kdef); var pkctable = GetKeyColumns(ctable); if (pkctable.Length > 0) // collected object is an entity { s.Item = new onetomany() { @class = context.Model.GetClassFromTableName(ctable.Name).name }; } else { var notanentity = context.Model.GetClassFromTableName(ctable.Name); property[] props = context.Model.GetPropertyOfEntity(notanentity.name); if (props.Length == 1) { //use an element element e = new element(); e.column = props[0].column ?? props[0].name; e.type1 = props[0].type1; e.type = props[0].type; e.precision = props[0].precision; e.length = props[0].length; s.Item = e; } else { //use a composite element compositeelement ce = new compositeelement(); ce.@class = context.NamingStrategy.GetClassNameForCollectionComponent(ctable.Name); ce.Items = context.Model.GetPropertyOfEntity(notanentity.name); s.Item = ce; } context.Model.RemoveEntity(notanentity.name); } } } } } }
private void CheckIfCanBeMap(set set, @class entity) { if (set.Item is onetomany) { var collectedEntity = context.Model.GetClassFromEntityName((set.Item as onetomany).@class); if (collectedEntity.Item is compositeid) { var cid = collectedEntity.Item as compositeid; List <string> setColumn = new List <string>(); if (!string.IsNullOrEmpty(set.key.column1)) { setColumn.Add(set.key.column1); } if (null != set.key.column) { setColumn.AddRange(set.key.column.Select(q => q.name)); } List <string> collectedKeyColumns = new List <string>(); collectedKeyColumns.AddRange(cid.Items.OfType <keyproperty>().Select(q => q.column1 ?? q.name)); List <string> nonOverlappingColumns; if (CheckOverlapping(setColumn, collectedKeyColumns, out nonOverlappingColumns)) { setToRemove.Add(set); entitiesToRemove.Add(collectedEntity.name); map map = new map(); map.name = set.name; map.table = set.table; map.key = set.key; var meta = context.GetTableMetaData(collectedEntity.schema, collectedEntity.table ?? collectedEntity.name); if (nonOverlappingColumns.Count == 1) { map.Item = new index() { column1 = nonOverlappingColumns[0], type = typeConverter.GetNHType(meta.GetColumnMetadata(nonOverlappingColumns[0])) }; } else { compositeindex ci = new compositeindex(); ci.@class = context.NamingStrategy.GetClassNameForComponentKey(map.name ?? map.table); ci.Items = nonOverlappingColumns.Select(q => new keyproperty() { name = context.NamingStrategy.GetPropertyNameFromColumnName(q) , column1 = context.NamingStrategy.GetPropertyNameFromColumnName(q) != q ? q : null , type1 = typeConverter.GetNHType(meta.GetColumnMetadata(q)) , length = meta.GetColumnMetadata(q).ColumnSize == 0 ? null:meta.GetColumnMetadata(q).ColumnSize.ToString() }).ToArray(); map.Item = ci; } property[] props = collectedEntity.Items.OfType <property>().ToArray(); if (props.Length == 1) { //use an element element e = new element(); e.column = props[0].column ?? props[0].name; e.type1 = props[0].type1; e.type = props[0].type; e.precision = props[0].precision; e.length = props[0].length; map.Item1 = e; } else { //use a composite element compositeelement ce = new compositeelement(); ce.@class = context.NamingStrategy.GetClassNameForCollectionComponent(collectedEntity.table ?? collectedEntity.name); ce.Items = context.Model.GetPropertyOfEntity(collectedEntity.name); map.Item1 = ce; } context.Model.AddCollectionToEntity(entity.name, map); } } } }
private void WireSets() { foreach (string tableToWire in FkForTables.Keys) { logger.Debug(string.Format("{0} working on:", GetType().Name) + tableToWire); Dictionary<string,int> multicolls = new Dictionary<string,int>(); var kinfo = FkForTables[tableToWire]; foreach (var key in kinfo.Keys) { var kdef = kinfo[key]; ITableMetadata ptable = GetPrimaryTable(kdef); ITableMetadata ctable = GetForeignTable(kdef); if (null != ptable) { var collectingClass = context.Model.GetClassFromTableName(ptable.Name); var collectedClass = context.Model.GetClassFromTableName(ctable.Name); if (null == collectedClass) logger.Warn(string.Format("Not included table {0} could not be used in a collection", ctable.Name)); if (null == collectingClass) logger.Warn(string.Format("Target table for a collection of {0} is not included", ptable.Name)); if (null != collectedClass && null != collectingClass) { if (!multicolls.ContainsKey(collectedClass.name)) multicolls[collectedClass.name] = 0; set s = new set(); s.inverse = true; context.Model.AddCollectionToEntity(collectingClass.name, s); s.table = collectedClass.table; s.name = context.NamingStrategy.GetNameForCollection(collectedClass.name, multicolls[collectedClass.name]); s.key = GenerateCollectionKey(kdef); var pkctable = GetKeyColumns(ctable); if (pkctable.Length > 0) // collected object is an entity { s.Item = new onetomany() { @class = context.Model.GetClassFromTableName(ctable.Name).name }; } else { var notanentity = context.Model.GetClassFromTableName(ctable.Name); property[] props = context.Model.GetPropertyOfEntity(notanentity.name); if (props.Length == 1) { //use an element element e = new element(); e.column = props[0].column ?? props[0].name; e.type1 = props[0].type1; e.type = props[0].type; e.precision = props[0].precision; e.length = props[0].length; s.Item = e; } else { //use a composite element compositeelement ce = new compositeelement(); ce.@class = context.NamingStrategy.GetClassNameForCollectionComponent(ctable.Name); ce.Items = context.Model.GetPropertyOfEntity(notanentity.name); s.Item = ce; } context.Model.RemoveEntity(notanentity.name); } } } } } }
private void CheckIfCanBeMap(set set, @class entity) { if (set.Item is onetomany) { var collectedEntity = context.Model.GetClassFromEntityName((set.Item as onetomany).@class); if (collectedEntity.Item is compositeid) { var cid = collectedEntity.Item as compositeid; List<string> setColumn = new List<string>(); if (!string.IsNullOrEmpty(set.key.column1)) setColumn.Add(set.key.column1); if (null != set.key.column) setColumn.AddRange(set.key.column.Select(q => q.name)); List<string> collectedKeyColumns = new List<string>(); collectedKeyColumns.AddRange(cid.Items.OfType<keyproperty>().Select(q => q.column1 ?? q.name)); List<string> nonOverlappingColumns; if (CheckOverlapping(setColumn, collectedKeyColumns, out nonOverlappingColumns)) { setToRemove.Add(set); entitiesToRemove.Add(collectedEntity.name); map map = new map(); map.name = set.name; map.table = set.table; map.key = set.key; var meta = context.GetTableMetaData(collectedEntity.schema, collectedEntity.table ?? collectedEntity.name); if (nonOverlappingColumns.Count == 1) { map.Item = new index() { column1 = nonOverlappingColumns[0], type = typeConverter.GetNHType(meta.GetColumnMetadata(nonOverlappingColumns[0])) }; } else { compositeindex ci = new compositeindex(); ci.@class = context.NamingStrategy.GetClassNameForComponentKey(map.name??map.table); ci.Items = nonOverlappingColumns.Select(q => new keyproperty() { name = context.NamingStrategy.GetPropertyNameFromColumnName(q) ,column1 = context.NamingStrategy.GetPropertyNameFromColumnName(q) != q ? q : null ,type1=typeConverter.GetNHType(meta.GetColumnMetadata(q)) ,length = meta.GetColumnMetadata(q).ColumnSize == 0 ? null:meta.GetColumnMetadata(q).ColumnSize.ToString() }).ToArray(); map.Item = ci; } property[] props = collectedEntity.Items.OfType<property>().ToArray(); if (props.Length == 1) { //use an element element e = new element(); e.column = props[0].column ?? props[0].name; e.type1 = props[0].type1; e.type = props[0].type; e.precision = props[0].precision; e.length = props[0].length; map.Item1 = e; } else { //use a composite element compositeelement ce = new compositeelement(); ce.@class = context.NamingStrategy.GetClassNameForCollectionComponent(collectedEntity.table??collectedEntity.name); ce.Items = context.Model.GetPropertyOfEntity(collectedEntity.name); map.Item1 = ce; } context.Model.AddCollectionToEntity(entity.name, map); } } } }