private FkTable[] GetFkRelationShips(int object_id, TypeSearchRelationship relationship, string dbPath = "") { string queryFormat = ""; if (relationship == TypeSearchRelationship.Direct) { string query = @"SELECT fk.name AS 'FkName', o1.name 'FkTable', c1.name 'FkColumn', o2.name 'PkTable', c2.name 'PkColumn' FROM {0}sys.foreign_keys fk INNER JOIN {0}sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id -- Obtenemos la relacion con las columans INNER JOIN {0}sys.columns c1 ON fkc.parent_column_id = c1.column_id AND fkc.parent_object_id = c1.object_id INNER JOIN {0}sys.columns c2 ON fkc.referenced_column_id = c2.column_id AND fkc.referenced_object_id = c2.object_id -- Obtenemos la relacion con las Tablas INNER JOIN {0}sys.objects o1 ON o1.object_id = c1.object_id INNER JOIN {0}sys.objects o2 ON o2.object_id = c2.object_id WHERE fk.{1} = {2}"; queryFormat = string.Format(query, dbPath, "parent_object_id", object_id); } else if (relationship == TypeSearchRelationship.Indirect) { queryFormat = string.Format(SQLQuery.GetOneToMany, object_id, dbPath); } else if (relationship == TypeSearchRelationship.ManyToMany) { queryFormat = string.Format(SQLQuery.GetManyToMany, object_id, dbPath); } DataTable dtFkRel = dbConnect.Execute(queryFormat); int tmpPos = 0; FkTable[] fkTables = new FkTable[dtFkRel.Rows.Count]; FkTable tmpFk = null; foreach (DataRow item in dtFkRel.Rows) { tmpFk = new FkTable(item); fkTables[tmpPos] = tmpFk; tmpPos++; } return(fkTables); }
/// <summary> /// /// </summary> /// <param name="name"></param> /// <param name="fkTable"></param> /// <param name="m_m"></param> /// <returns></returns> private string GenerateMapperRelationShips(string name, FkTable fkTable, bool m_m = false) { StringBuilder relations = new StringBuilder(); string tmpStr = ""; if (m_m) { // Many to Many if (fkTable.CreateConfig == 0) { return(""); } tmpStr = @" HasMany(x => x.{0}) .WithMany(x => x.{1}) .Map(m => {5} m.ToTable(""{2}""); m.MapLeftKey(""{3}""); m.MapRightKey(""{4}""); {6});"; return(string.Format(tmpStr, fkTable.pkTableName, name, fkTable.fkTableName, fkTable.fkColumn, fkTable.pkColumn, "{", "}")); } else { // One to Many tmpStr = @" HasRequired(x => x.{0}) .WithMany(x => x.{1}) .HasForeignKey(d => d.{2});"; return(string.Format(tmpStr, RemoveLast_S(fkTable.pkTableName), name, UppercaseFirst(fkTable.fkColumn))); } }