/// <summary> /// Generates the mapping files /// </summary> /// <param name="entityNames"></param> /// <param name="tableNames">String array with table names</param> /// <param name="alColumns">ArrayList with columns for each table name</param> /// <param name="alTableRelations"></param> /// <param name="fileName">The file path</param> /// <param name="namespaceName">Namespace name</param> public void GenerateTableMetadatata(string[] entityNames, string[] tableNames, ArrayList alColumns, ArrayList alTableRelations, string fileName, string namespaceName) { if (entityNames.Length != alColumns.Count) { throw new ArgumentException(); } if (!fileName.EndsWith(".cs")) { fileName = fileName + ".cs"; } FileStream fs = null; StreamWriter sw = null; try { if (File.Exists(fileName)) { fs = new FileStream(fileName, FileMode.Truncate, FileAccess.Write); } else { fs = new FileStream(fileName, FileMode.Create, FileAccess.Write); } sw = new StreamWriter(fs); namespaceName = Utilies.RemoveEmptySpaces(namespaceName); //write header; sw.WriteLine("using System;"); sw.WriteLine("using System.Data;"); sw.WriteLine("using voidsoft.DataBlock;"); sw.WriteLine(""); sw.WriteLine("namespace " + namespaceName); sw.WriteLine("{"); for (int i = 0; i < entityNames.Length; i++) { entityNames[i] = Utilies.RemoveEmptySpaces(entityNames[i].Trim()); DatabaseColumn[] column = (DatabaseColumn[])alColumns[i]; sw.WriteLine(""); sw.WriteLine(" [Serializable()]"); sw.WriteLine(" public partial class "+ entityNames[i] + " : TableMetadata"); sw.WriteLine(" {"); sw.WriteLine(""); #region generate the internal enum with myFields sw.WriteLine(" public enum " + entityNames[i] + "Fields"); sw.WriteLine(" {"); for (int ij = 0; ij < column.Length; ij++) { if (ij == column.Length - 1) { sw.WriteLine(" " + column[ij].Name); } else { sw.WriteLine(" " + column[ij].Name + ","); } } sw.WriteLine(" }"); #endregion sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(" private DatabaseField[] myFields;"); sw.WriteLine(""); #region generate ctor sw.WriteLine(" public "+ entityNames[i] + "()"); sw.WriteLine(" {"); sw.WriteLine(" myFields = new DatabaseField["+ column.Length + "];"); string isPrimaryKey; string isAutoIncremented; for (int x = 0; x < column.Length; x++) { string dataType = column[x].columnDataType; //check the type. If it's a byte[] "rename" it to if (dataType.Trim() == "System.Byte[]") { dataType = "System.Binary"; } isPrimaryKey = column[x].isPrimaryKey.ToString(); isAutoIncremented = column[x].isAutoIncremented.ToString(); //make it lower case for C# isPrimaryKey = isPrimaryKey.ToLower(); isAutoIncremented = isAutoIncremented.ToLower(); sw.WriteLine(" myFields[" + x + "] = new DatabaseField(DbType." + dataType.Substring(dataType.IndexOf(".") + 1) + ",\"" + column[x].Name + "\"," + isPrimaryKey + "," + isAutoIncremented + "," + "null);"); } sw.WriteLine(" "); sw.WriteLine(" this.currentTableName = \"" + tableNames[i] + "\";"); sw.WriteLine(""); List <TableRelation> relations = (List <TableRelation>)alTableRelations[i]; #region generate relations for (int j = 0; j < relations.Count; j++) { //check the realtion type if (relations[j] is ParentTableRelation) { ParentTableRelation pp = (ParentTableRelation)relations[j]; sw.WriteLine("this.listRelations.Add(new ParentTableRelation(\"" + pp.RelatedTableName + "\", \"" + pp.ForeignKeyName + "\"," + "TableRelationCardinality." + pp.RelationCardinality.ToString() + "," + pp.CascadeDeleteChildren.ToString().ToLower() + "));"); } else if (relations[j] is ChildTableRelation) { ChildTableRelation ch = (ChildTableRelation)relations[j]; sw.WriteLine("this.listRelations.Add(new ChildTableRelation(\"" + ch.RelatedTableName + "\",TableRelationCardinality.OneToOne,\"" + ch.RelatedTableKeyName + "\",\"" + ch.ForeignKeyName + "\"));"); } else { //many to many ManyToManyTableRelation mm = (ManyToManyTableRelation)relations[j]; sw.WriteLine("this.listRelations.Add(new ManyToManyTableRelation(\"" + mm.RelatedTableName + "\",\"" + mm.IntermediaryTableName + "\",\"" + mm.IntermediaryKeyFieldFromParentTable + "\",\"" + mm.IntermediaryKeyFieldFromChildTable + "\"));"); } } sw.WriteLine(""); sw.WriteLine(" }"); //end ctor brace. #endregion #endregion //generate DatabasemyFields sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(" public override DatabaseField[] TableFields "); sw.WriteLine(" {"); sw.WriteLine(" get{ return myFields;}"); sw.WriteLine(" set{myFields = value;}"); sw.WriteLine(" }"); #region Clone sw.WriteLine(" public " + entityNames[i] + " Clone()"); sw.WriteLine(" {"); sw.WriteLine(" return this.Clone<" + entityNames[i] + ">();"); sw.WriteLine(" }"); #endregion #region generate properties with nullable data types for (int x = 0; x < column.Length; x++) { //generate a empty byte[] if (column[x].columnDataType == "System.Byte[]") { sw.WriteLine(""); sw.WriteLine("public " + column[x].columnDataType + " " + column[x].Name); sw.WriteLine("{"); sw.WriteLine(" get"); sw.WriteLine(" {"); sw.WriteLine(" object result = (this.GetField(\"" + column[x].Name + "\")).fieldValue;"); sw.WriteLine(" if(result == null)"); sw.WriteLine(" {"); sw.WriteLine(" return new System.Byte[0];"); sw.WriteLine(" }"); sw.WriteLine(""); sw.WriteLine(" return (" + column[x].columnDataType + ") result;"); // + " (this.GetField(\"" + column[x].Name + "\")).fieldValue;"); sw.WriteLine(" }"); sw.WriteLine(""); sw.WriteLine(" set"); sw.WriteLine(" {"); sw.WriteLine(" this.SetFieldValue(\"" + column[x].Name + "\", value);"); sw.WriteLine(" }"); sw.WriteLine("}"); sw.WriteLine(""); } else if (column[x].columnDataType == "System.String") { sw.WriteLine(""); //generate validation attributes if (generateValidationAttributes) { //not null if (!column[x].allowsNull) { //sw.WriteLine("[EvilAttributes.ValidateRequired(" + column[x].Name + "Null" + ")]"); } //also add size check //sw.WriteLine("[EvilAttributes.ValidateMaxLength(" + column[x].fieldLength + ", " + column[x].Name + "MaxLength" + ")]"); } sw.WriteLine("public " + column[x].columnDataType + " " + column[x].Name); sw.WriteLine("{"); sw.WriteLine(" get"); sw.WriteLine(" {"); sw.WriteLine(" object result = this.GetField(\"" + column[x].Name + "\").fieldValue; "); sw.WriteLine(" return (result != null) ? result.ToString() : null;"); sw.WriteLine(" }"); sw.WriteLine(""); sw.WriteLine(" set"); sw.WriteLine(" {"); sw.WriteLine(" this.SetFieldValue(\"" + column[x].Name + "\", value);"); sw.WriteLine(" }"); sw.WriteLine("}"); sw.WriteLine(""); } else { //generate nullable types for the rest of the columns if (generateValidationAttributes) { if (!column[x].allowsNull) { // sw.WriteLine("[EvilAttributes.ValidateRequired(" + column[x].Name + "Null" + ")]"); } } if (column[x].allowsNull) { sw.WriteLine(""); sw.WriteLine("public " + column[x].columnDataType + "? " + column[x].Name); sw.WriteLine("{"); sw.WriteLine(" get"); sw.WriteLine(" {"); sw.WriteLine(" object result = this.GetField(\"" + column[x].Name + "\").fieldValue; "); sw.WriteLine(" return (result == null || result == DBNull.Value) ? null : (" + column[x].columnDataType + "?) result;"); sw.WriteLine(" }"); sw.WriteLine(""); sw.WriteLine(" set"); sw.WriteLine(" {"); sw.WriteLine(" this.SetFieldValue(\"" + column[x].Name + "\", value);"); sw.WriteLine(" }"); sw.WriteLine("}"); sw.WriteLine(""); } else { sw.WriteLine(""); sw.WriteLine("public " + column[x].columnDataType + " " + column[x].Name); sw.WriteLine("{"); sw.WriteLine(" get"); sw.WriteLine(" {"); sw.WriteLine(" return (" + column[x].columnDataType + ") this.GetField(\"" + column[x].Name + "\").fieldValue; "); sw.WriteLine(" }"); sw.WriteLine(""); sw.WriteLine(" set"); sw.WriteLine(" {"); sw.WriteLine(" this.SetFieldValue(\"" + column[x].Name + "\", value);"); sw.WriteLine(" }"); sw.WriteLine("}"); sw.WriteLine(""); } } } #endregion #region Generate Get methods //generate "Get" methods implementation; for (int j = 0; j < relations.Count; j++) { //check the realtion type if (relations[j] is ParentTableRelation) { ParentTableRelation pp = (ParentTableRelation)relations[j]; if (pp.RelationCardinality == RelationCardinality.OneToOne) { sw.WriteLine("public TableMetadata Get" + Utilies.GetEntityName(pp.RelatedTableName) + "()"); sw.WriteLine("{"); sw.WriteLine(" Type relatedType = Type.GetType(\"" + namespaceName + "." + Utilies.GetEntityName(pp.RelatedTableName) + "\");"); sw.WriteLine(" TableMetadata[] result = this.GetRelatedTableData(relatedType);"); sw.WriteLine(" return result.Length > 0 ? result[0] : null; "); sw.WriteLine("}"); } else if (pp.RelationCardinality == RelationCardinality.OneToMany) { sw.WriteLine("public Array Get" + Utilies.GetEntityName(pp.RelatedTableName) + "()"); sw.WriteLine("{"); sw.WriteLine(" Type relatedType = Type.GetType(\"" + namespaceName + "." + Utilies.GetEntityName(pp.RelatedTableName) + "\");"); sw.WriteLine(" return this.GetRelatedTableData(relatedType);"); sw.WriteLine("}"); } } else if (relations[j] is ChildTableRelation) { ChildTableRelation pp = (ChildTableRelation)relations[j]; sw.WriteLine("public TableMetadata Get" + Utilies.GetEntityName(pp.RelatedTableName) + "()"); sw.WriteLine("{"); sw.WriteLine(" Type relatedType = Type.GetType(\"" + namespaceName + "." + Utilies.GetEntityName(pp.RelatedTableName) + "\");"); sw.WriteLine(" TableMetadata[] result = this.GetRelatedTableData(relatedType);"); sw.WriteLine(" return result.Length > 0 ? result[0] : null; "); sw.WriteLine("}"); } else { ManyToManyTableRelation pp = (ManyToManyTableRelation)relations[j]; sw.WriteLine("public Array Get" + Utilies.GetEntityName(pp.RelatedTableName) + "()"); sw.WriteLine("{"); sw.WriteLine(" Type relatedType = Type.GetType(\"" + namespaceName + "." + Utilies.GetEntityName(pp.RelatedTableName) + "\");"); sw.WriteLine(" Type intermediaryType = Type.GetType(\"" + namespaceName + "." + Utilies.GetEntityName(pp.IntermediaryTableName) + "\");"); sw.WriteLine(" return this.GetRelatedTableData(relatedType, intermediaryType);"); sw.WriteLine("}"); } } #endregion sw.WriteLine("}"); //end class brace } //end namespace brace sw.WriteLine("}"); sw.Flush(); sw.Close(); } catch { throw; } finally { if (sw != null) { sw.Close(); } if (fs != null) { fs.Close(); } } }
private void buttonOK_Click(object sender, EventArgs e) { //do some checks try { switch (comboBoxRelationType.SelectedIndex) { case 0: if (CheckParentChildRelation()) { //create the relation ParentTableRelation relation = new ParentTableRelation(); this.relation = relation; relation.CascadeDeleteChildren = checkBoxEnableCascadeDelete.Checked; if (comboBoxParentChildRelationCardinality.SelectedIndex == 0) { relation.RelationCardinality = RelationCardinality.OneToOne; } else { relation.RelationCardinality = RelationCardinality.OneToMany; } relation.RelatedTableName = comboBoxParentChildRelatedTable.SelectedItem.ToString(); relation.ForeignKeyName = comboBoxParentChildFields.SelectedItem.ToString(); DialogResult = DialogResult.OK; this.relation = (TableRelation)relation; Close(); } break; case 1: if (CheckChildParentRelation()) { ChildTableRelation relation = new ChildTableRelation(); relation.RelationCardinality = RelationCardinality.OneToOne; relation.RelatedTableName = comboBoxChildParentRelatedTable.SelectedItem.ToString(); relation.RelatedTableKeyName = comboBoxChildParentPrimaryKeyFields.SelectedItem.ToString(); relation.ForeignKeyName = comboBoxChildParentForeignKeyFields.SelectedItem.ToString(); DialogResult = DialogResult.OK; this.relation = (TableRelation)relation; Close(); } break; case 2: if (CheckManyToManyRelation()) { ManyToManyTableRelation relation = new ManyToManyTableRelation(); relation.RelationCardinality = RelationCardinality.ManyToMany; relation.RelatedTableName = comboBoxManyToManyRelatedTable.SelectedItem.ToString(); relation.IntermediaryTableName = comboBoxManyToManyIntermediaryTable.SelectedItem.ToString(); relation.IntermediaryKeyFieldFromChildTable = comboBoxManyToManyIntermediaryForeignKeyRelatedEntity.SelectedItem.ToString(); relation.IntermediaryKeyFieldFromParentTable = comboBoxManyToManyIntermediaryForeignKeyOurEntity.SelectedItem.ToString(); this.relation = (TableRelation)relation; DialogResult = DialogResult.OK; Close(); } break; } } catch (Exception ex) { MessageBox.Show("Error \n" + ex.Message, "DataBlock Modeler", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// </summary> /// <param name="tableNames">String array with table names</param> /// <param name="alColumns">ArrayList with columns for each table name</param> /// <param name="alTableRelations"></param> /// <param name="fileName">The file path</param> /// <param name="namespaceName">Namespace name</param> public void GenerateTableMetadatata(string[] entityNames, string[] tableNames, ArrayList alColumns, ArrayList alTableRelations, string fileName, string namespaceName) { if (entityNames.Length != alColumns.Count) { throw new ArgumentException(); } if (!fileName.EndsWith(".vb")) { fileName = fileName + ".vb"; } FileStream fs = null; StreamWriter sw = null; try { if (File.Exists(fileName)) { fs = new FileStream(fileName, FileMode.Truncate, FileAccess.Write); } else { fs = new FileStream(fileName, FileMode.Create, FileAccess.Write); } sw = new StreamWriter(fs); //write header; sw.WriteLine("Imports System"); sw.WriteLine("Imports System.Data"); sw.WriteLine("Imports voidsoft.DataBlock"); sw.WriteLine(""); sw.WriteLine("Namespace " + namespaceName); sw.WriteLine(" "); for (int i = 0; i < entityNames.Length; i++) { entityNames[i] = entityNames[i].Trim(); DatabaseColumn[] column = (DatabaseColumn[])alColumns[i]; sw.WriteLine(""); sw.WriteLine(" <Serializable()> Public Class " + entityNames[i]); sw.WriteLine(" Inherits TableMetadata"); #region add enum field sw.WriteLine(" Public Enum " + entityNames[i] + "Fields"); for (int k = 0; k < column.Length; k++) { sw.WriteLine(" " + column[k].Name + " = " + (k + 1).ToString()); } sw.WriteLine(" End enum"); #endregion sw.WriteLine(" Private _fields() as DatabaseField"); sw.WriteLine(""); #region generate ctor sw.WriteLine(" Sub New() "); sw.WriteLine(" "); sw.WriteLine(" _fields = new DatabaseField("+ (column.Length - 1) + ") {}"); string isPrimaryKey; string isAutoIncremented; //generate ctor for (int x = 0; x < column.Length; x++) { string dataType = column[x].columnDataType; // ds.Tables[i].Columns[x].DataType.ToString().Substring(ds.Tables[i].Columns[x].DataType.ToString().IndexOf(".") + 1); if (dataType.Trim() == "System.Byte[]") { dataType = "System.Binary"; } isPrimaryKey = column[x].isPrimaryKey.ToString(); isAutoIncremented = column[x].isAutoIncremented.ToString(); sw.WriteLine(" _fields(" + x + ") = new DatabaseField(DbType." + dataType.Substring(dataType.IndexOf(".") + 1) + ",\"" + column[x].Name + "\"," + isPrimaryKey + "," + isAutoIncremented + "," + "Nothing)"); } sw.WriteLine(" "); sw.WriteLine("me.currentTableName = \"" + tableNames[i] + "\""); sw.WriteLine(""); TableRelation[] relations = (TableRelation[])alTableRelations[i]; #region generate relations for (int j = 0; j < relations.Length; j++) { //check the realtion type if (relations[j] is ParentTableRelation) { ParentTableRelation pp = (ParentTableRelation)relations[j]; sw.WriteLine("Me.listRelations.Add(new ParentTableRelation(\"" + pp.RelatedTableName + "\", \"" + pp.ForeignKeyName + "\"," + "TableRelationCardinality." + pp.RelationCardinality.ToString() + "," + pp.CascadeDeleteChildren.ToString() + "))"); } else if (relations[j] is ChildTableRelation) { ChildTableRelation ch = (ChildTableRelation)relations[j]; sw.WriteLine("Me.listRelations.Add(new ChildTableRelation(\"" + ch.RelatedTableName + "\",TableRelationCardinality.OneToOne,\"" + ch.RelatedTableKeyName + "\",\"" + ch.ForeignKeyName + "\"))"); } else { //many to many ManyToManyTableRelation mm = (ManyToManyTableRelation)relations[j]; sw.WriteLine("Me.listRelations.Add(new ManyToManyTableRelation(\"" + mm.RelatedTableName + "\",\"" + mm.IntermediaryTableName + "\",\"" + mm.IntermediaryKeyFieldFromParentTable + "\",\"" + mm.IntermediaryKeyFieldFromChildTable + "\"))"); } } #endregion sw.WriteLine(""); sw.WriteLine("End Sub"); #endregion //generate TableName and DatabaseFields sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(" Public Overrides Property TableFields() as DatabaseField() "); sw.WriteLine(" Get"); sw.WriteLine(" Return _fields"); sw.WriteLine(" End Get"); sw.WriteLine(" Set (ByVal Value as DatabaseField())"); sw.WriteLine(" _fields = value"); sw.WriteLine(" End Set"); sw.WriteLine(" End Property"); #region generate Clone sw.WriteLine(" Public Function Clone() As " + entityNames[i]); sw.WriteLine(" Return Me.Clone(Of " + entityNames[i] + ")"); sw.WriteLine(" End Function"); #endregion #region generate properties for (int x = 0; x < column.Length; x++) { if (column[x].columnDataType == "System.Byte[]") { string dataType = "System.Byte()"; sw.WriteLine(""); sw.WriteLine(" Public Property " + column[x].Name + "() As " + dataType); sw.WriteLine(" Get"); sw.WriteLine(" Dim result As Object = Me.GetField(\"" + column[x].Name + "\").fieldValue"); sw.WriteLine(" If result = Nothing Then"); sw.WriteLine(" Dim data(0) As Byte"); sw.WriteLine(" Return data"); sw.WriteLine(" End If"); sw.WriteLine(" Return CType((Me.GetField(\"" + column[x].Name + "\")).fieldValue," + dataType + ")"); sw.WriteLine(" End Get "); dataType = "System.Byte"; sw.WriteLine(" Set(ByVal Value() As " + dataType + ")"); sw.WriteLine(" Me.SetFieldValue(\"" + column[x].Name + "\", Value)"); sw.WriteLine(" End Set"); sw.WriteLine(" End Property"); } else if (column[x].columnDataType == "System.String") { sw.WriteLine(""); sw.WriteLine(" Public Property " + column[x].Name + " As " + column[x].columnDataType); sw.WriteLine(" Get"); sw.WriteLine(" Return CType((Me.GetField(\"" + column[x].Name + "\")).fieldValue," + column[x].columnDataType + ")"); sw.WriteLine(" End Get "); sw.WriteLine(" Set(ByVal Value As " + column[x].columnDataType + ")"); sw.WriteLine(" Me.SetFieldValue(\"" + column[x].Name + "\", Value)"); sw.WriteLine(" End Set"); sw.WriteLine(" End Property"); } else { //nullable types sw.WriteLine(""); sw.WriteLine(" Public Property " + column[x].Name + " As Nullable(Of " + column[x].columnDataType + ")"); sw.WriteLine(" Get"); sw.WriteLine(" Return CType((Me.GetField(\"" + column[x].Name + "\")).fieldValue," + "Nullable(Of " + column[x].columnDataType + "))"); sw.WriteLine(" End Get "); sw.WriteLine(" Set(ByVal Value As Nullable(Of " + column[x].columnDataType + "))"); sw.WriteLine(" Me.SetFieldValue(\"" + column[x].Name + "\", Value)"); sw.WriteLine(" End Set"); sw.WriteLine(" End Property"); } } #endregion #region generate "Get" methods implementation; for (int j = 0; j < relations.Length; j++) { //check the realtion type if (relations[j] is ParentTableRelation) { ParentTableRelation pp = (ParentTableRelation)relations[j]; if (pp.RelationCardinality == RelationCardinality.OneToOne) { sw.WriteLine("public Function Get" + pp.RelatedTableName + "() As TableMetadata"); sw.WriteLine(" Dim relatedType As Type = Type.GetType(\"" + namespaceName + "." + pp.RelatedTableName + "\")"); sw.WriteLine(" Dim result() As TableMetadata() = Me.GetRelatedTableData(relatedType)"); sw.WriteLine(" If result.Length > 0 Then"); sw.WriteLine(" Return result(0);"); sw.WriteLine(" Else"); sw.WriteLine(" Return Nothing"); sw.WriteLine(" End If"); sw.WriteLine("End Function"); } else if (pp.RelationCardinality == RelationCardinality.OneToMany) { sw.WriteLine("Public Function Get" + pp.RelatedTableName + "() As Array"); sw.WriteLine(" Dim relatedType As Type = Type.GetType(\"" + namespaceName + "." + pp.RelatedTableName + "\")"); sw.WriteLine(" Return Me.GetRelatedTableData(relatedType)"); sw.WriteLine("End Function"); } } else if (relations[j] is ChildTableRelation) { ChildTableRelation pp = (ChildTableRelation)relations[j]; sw.WriteLine("Public Function Get" + pp.RelatedTableName + "() As TableMetadata"); sw.WriteLine(" Dim relatedType As Type = Type.GetType(\"" + namespaceName + "." + pp.RelatedTableName + "\")"); sw.WriteLine(" Dim result() As TableMetadata = Me.GetRelatedTableData(relatedType)"); sw.WriteLine(" If result.Length > 0 Then"); sw.WriteLine(" Return result(0)"); sw.WriteLine(" Else"); sw.WriteLine(" Return Nothing"); sw.WriteLine(" End If"); sw.WriteLine("End Function"); } else { ManyToManyTableRelation pp = (ManyToManyTableRelation)relations[j]; sw.WriteLine("Public Function Get" + pp.RelatedTableName + "() As Array"); sw.WriteLine(" Dim relatedType As Type = Type.GetType(\"" + namespaceName + "." + pp.RelatedTableName + "\")"); sw.WriteLine(" Dim intermediaryType As Type = Type.GetType(\"" + namespaceName + "." + pp.IntermediaryTableName + "\")"); sw.WriteLine(" Return Me.GetRelatedTableData(relatedType, intermediaryType)"); sw.WriteLine("End Function"); } } #endregion } //end namespace brace sw.WriteLine("End Class"); sw.WriteLine("End Namespace"); sw.Flush(); sw.Close(); fs.Close(); } catch { throw; } finally { if (sw != null) { sw.Close(); } if (fs != null) { fs.Close(); } } }
internal static void ParseRelation(string[] parts, ref TableRelation relation, ref string tableName) { try { Dictionary <string, string> entries = new Dictionary <string, string>(); foreach (string part in parts) { try { string[] internalPieces = part.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); if (internalPieces.Length != 2) { continue; } entries.Add(internalPieces[0].Trim().ToLower(), internalPieces[1].Trim()); } catch { continue; } } //check the type string entry; entries.TryGetValue(TYPE, out entry); if (string.IsNullOrEmpty(entry)) { return; } if (entry == CHILD_PARENT) { ChildTableRelation childTableRelation = new ChildTableRelation(); childTableRelation.ForeignKeyName = entries[FOREIGN_KEY_FIELD_NAME]; childTableRelation.RelatedTableName = entries[RELATED_TABLE_NAME]; childTableRelation.RelationCardinality = (RelationCardinality)Enum.Parse(typeof(RelationCardinality), entries[CARDINALITY], true); childTableRelation.RelatedTableKeyName = entries[PRIMARY_KEY_FIELD_NAME]; tableName = entries[TABLE]; relation = childTableRelation; } else if (entry == PARENT_CHILD) { ParentTableRelation parentTableRelation = new ParentTableRelation(); parentTableRelation.RelatedTableName = entries[RELATED_TABLE_NAME]; parentTableRelation.ForeignKeyName = entries[FOREIGN_KEY_FIELD_NAME]; parentTableRelation.RelationCardinality = (RelationCardinality)Enum.Parse(typeof(RelationCardinality), entries[CARDINALITY], true); tableName = entries[TABLE]; parentTableRelation.CascadeDeleteChildren = Convert.ToBoolean(entries[CASCADE_DELETE_CHILDREN]); relation = parentTableRelation; } else if (entry == MANY_TO_MANY) { ManyToManyTableRelation manyTableRelation = new ManyToManyTableRelation(); manyTableRelation.RelatedTableName = entries[RELATED_TABLE_NAME]; manyTableRelation.IntermediaryTableName = entries[INTERMEDIARY_TABLE_NAME]; manyTableRelation.IntermediaryKeyFieldFromParentTable = entries[INTERMEDIARY_KEY_FIELD_FROM_PARENT_TABLE]; manyTableRelation.IntermediaryKeyFieldFromChildTable = entries[INTERMEDIARY_KEY_FIELD_FROM_CHILD_TABLE]; manyTableRelation.RelationCardinality = RelationCardinality.ManyToMany; tableName = entries[TABLE]; relation = manyTableRelation; } } catch { relation = null; } }