IPersistentMemberInfo CreateMember(Column column, IPersistentClassInfo owner, TemplateType templateType) { var columnName = column.Name; ForeignKey foreignKey = _foreignKeyCalculator.GetForeignKey(column); if (column.IsForeignKey && owner.CodeTemplateInfo.CodeTemplate.TemplateType != TemplateType.Struct && _foreignKeyCalculator.IsOneToOne(foreignKey, columnName)) { templateType = TemplateType.XPOneToOnePropertyMember; } else if (foreignKey != null && foreignKey.Columns.Count > 1) { columnName = foreignKey.ReferencedTable; } if (_objectSpace.FindObject <IPersistentMemberInfo>(info => info.Name == columnName && info.Owner == owner, PersistentCriteriaEvaluationBehavior.InTransaction) != null) { return(null); } if (!(column.IsForeignKey)) { return(CreatePersistentCoreTypeMemberInfo(column, owner, templateType)); } if (foreignKey != null) { IPersistentClassInfo referenceClassInfo = GetReferenceClassInfo(foreignKey.ReferencedTable); var persistentReferenceMemberInfo = CreatePersistentReferenceMemberInfo(columnName, owner, referenceClassInfo, templateType); return(persistentReferenceMemberInfo); } throw new NotImplementedException(column.Name + " " + ((Table)column.Parent).Name); }
void CreateTemplateInfo(IPersistentReferenceMemberInfo persistentReferenceMemberInfo, Column column, ForeignKeyCalculator _foreignKeyCalculator) { var table = (Table)column.Parent; var database = table.Parent; var foreignKey = _foreignKeyCalculator.GetForeignKey(database, column.Name, table); var templateInfo = _objectSpace.CreateWCObject<ITemplateInfo>(); templateInfo.Name = persistentReferenceMemberInfo.CodeTemplateInfo.CodeTemplate.TemplateType.ToString(); templateInfo.TemplateCode = _foreignKeyCalculator.GetRefTableForeignKey(foreignKey, column.Name).Columns.OfType<ForeignKeyColumn>(). Where(keyColumn => keyColumn.ReferencedColumn == column.Name).Single().Name; persistentReferenceMemberInfo.TemplateInfos.Add(templateInfo); }
void CreateTemplateInfo(IPersistentReferenceMemberInfo persistentReferenceMemberInfo, Column column, ForeignKeyCalculator _foreignKeyCalculator) { var table = (Table)column.Parent; var database = table.Parent; var foreignKey = _foreignKeyCalculator.GetForeignKey(database, column.Name, table); var templateInfo = _objectSpace.CreateWCObject <ITemplateInfo>(); templateInfo.Name = persistentReferenceMemberInfo.CodeTemplateInfo.CodeTemplate.TemplateType.ToString(); templateInfo.TemplateCode = _foreignKeyCalculator.GetRefTableForeignKey(foreignKey, column.Name).Columns.OfType <ForeignKeyColumn>().Single(keyColumn => keyColumn.ReferencedColumn == column.Name).Name; persistentReferenceMemberInfo.TemplateInfos.Add(templateInfo); }
bool IsCompoundForeignKey(Column column) { var foreignKey = _foreignKeyCalculator.GetForeignKey(column); return(foreignKey.Columns.Count > 1); }