private void OnStartLoadingDatabaseSchema() { List <string> listTables = null; try { //load the table names listTables = Schema.GetTableList(GeneratorContext.currentDatabaseServer, GeneratorContext.currentConnectionString); GeneratorContext.CurrentDatabaseTables.Clear(); for (int i = 0; i < listTables.Count; i++) { try { //load the column info for current table DatabaseColumn[] columns = Schema.GetColumnInfo(GeneratorContext.currentDatabaseServer, listTables[i], GeneratorContext.currentConnectionString); string tableName = Utilies.RemoveEmptySpaces(listTables[i]); GeneratorContext.CurrentDatabaseTables.Add(new DatabaseTable(tableName, columns, Utilies.GetEntityName(tableName))); } catch { continue; } } //invoke the delegate on the UI thread myView.Invoke(finishedLoadingCallback, new object[1] { string.Empty }); } catch (Exception ex) { myView.Invoke(finishedLoadingCallback, new object[1] { ex.Message }); } }
/// <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(); } } }