private static void CreateColumn(MetadataColumn mc, MetadataTable mt, StringBuilder sb) { string format = "\t\tpublic {0}{1}{2} {3}{4}\r\n\r\n"; string FKformat = "\t\t[FK(\"{0}\",\"{1}\",\"{2}\",\"{3}\")]\r\n"; if (mc.IsForeignKey) { List <MetadataForeignKey> FKs = new List <MetadataForeignKey>(); try { IEnumerable <MetadataForeignKey> fks = mt.FindForeignKeys(mc); FKs.AddRange(fks); } catch (Exception ex) { throw ex; } if (FKs.Count == 0) { throw new InvalidOperationException(string.Format("The foreign key for Column {0} in table {1} cannot be resolved to one key", mc.Name, mt.Fullname)); } MetadataForeignKey FK = FKs.First(); sb.AppendFormat(FKformat, FK.ReferencedTable, FK.ColumnReferences.First().ReferencedColumn.Name, FK.ReferencedSchema, FK.Name); } if (mc.IsPrimaryKey) { sb.AppendLine("\t\t[PK]"); } bool nullable = mc.Nullable && (mc.DataType != typeof(string) && !mc.DataType.IsByRef && !mc.DataType.IsArray); if (ClassCreationOptions.ColumnAsProperty) { sb.AppendFormat(format, (nullable ? "Nullable<" : ""), mc.DataType.Name, nullable ? "> " : " ", mc.Name, " { get; set; }"); } else { sb.AppendFormat(format, nullable ? "Nullable<" : "", mc.DataType.Name, nullable ? "> " : " ", mc.Name, ";"); } }
private static void CreateColumn(MetadataColumn mc, MetadataTable mt, StringBuilder sb) { string format = "\t\tpublic {0}{1}{2} {3}{4}\r\n\r\n"; string FKformat = "\t\t[FK(\"{0}\",\"{1}\",\"{2}\",\"{3}\")]\r\n"; if (mc.IsForeignKey) { List<MetadataForeignKey> FKs = new List<MetadataForeignKey>(); try { IEnumerable<MetadataForeignKey> fks = mt.FindForeignKeys(mc); FKs.AddRange(fks); } catch (Exception ex) { throw ex; } if (FKs.Count == 0) { throw new InvalidOperationException(string.Format("The foreign key for Column {0} in table {1} cannot be resolved to one key", mc.Name, mt.Fullname)); } MetadataForeignKey FK = FKs.First(); sb.AppendFormat(FKformat, FK.ReferencedTable,FK.ColumnReferences.First().ReferencedColumn.Name, FK.ReferencedSchema, FK.Name); } if (mc.IsPrimaryKey) { sb.AppendLine("\t\t[PK]"); } bool nullable = mc.Nullable && (mc.DataType != typeof(string) && !mc.DataType.IsByRef && !mc.DataType.IsArray); if (ClassCreationOptions.ColumnAsProperty) { sb.AppendFormat(format, (nullable ? "Nullable<" : ""),mc.DataType.Name, nullable ? "> " : " ", mc.Name, " { get; set; }"); } else { sb.AppendFormat(format, nullable ? "Nullable<" : "", mc.DataType.Name, nullable ? "> " : " ", mc.Name, ";"); } }
private static JoinConditionGroup To(SqlBuilder Builder, Table FromSqlTable, MetadataTable FromTable, MetadataColumn FromField, MetadataTable ToTable, Join.JoinTypes JoinType, bool PreferForeignKeyOverPrimaryKey = true) { MetadataDatabase mdb = Builder.Metadata; List <MetadataForeignKey> Fks = null; MetadataForeignKey FK = null; Join j = null; MetadataColumnReference mcr = null; JoinConditionGroup jcg = null; if (FromField.IsPrimaryKey) { if (!FromField.IsForeignKey || !PreferForeignKeyOverPrimaryKey) { Fks = ToTable.ForeignKeys.Values.Where(x => x.ReferencedTable.Equals(FromTable.Name) && x.ReferencedSchema.Equals(FromTable.Schema) && x.ColumnReferences.Any(y => y.ReferencedColumn.Equals(FromField))).ToList(); if (Fks.Count != 1) { throw new InvalidOperationException(string.Format("The column '{0}' is referenced by {1} keys in the table {2}. Expected 1. Make the join manually", FromField.Name, Fks.Count, ToTable.Fullname)); } FK = Fks.First(); j = SqlStatementExtensions.MakeJoin(JoinType, FromSqlTable, ToTable.Name, null, ToTable.Schema.Equals("dbo") ? null : ToTable.Schema); mcr = FK.ColumnReferences.First(); jcg = j.On(FromField.Name, SqlOperators.Equal, mcr.Name); return(jcg); } } if (FromField.IsForeignKey) { Fks = new List <MetadataForeignKey>(FromTable.FindForeignKeys(FromField, ToTable.Name)); if (Fks.Count != 1) { throw new InvalidOperationException(string.Format("The column '{0}' resolves to {1} keys in the table {2}. Expected 1. Make the join manually", FromField.Name, Fks.Count, ToTable.Fullname)); } FK = Fks.First(); j = SqlStatementExtensions.MakeJoin(JoinType, FromSqlTable, ToTable.Name, null, ToTable.Schema.Equals("dbo") ? null : ToTable.Schema); mcr = FK.ColumnReferences.First(); jcg = j.On(FromField.Name, SqlOperators.Equal, mcr.ReferencedColumn.Name); if (FK.ColumnReferences.Count > 1) { foreach (MetadataColumnReference mcr2 in FK.ColumnReferences.Skip(1)) { if (mcr2.Name.StartsWith("\"")) { // its a value reference // jcg.And(FK.ReferencedTable, mcr2.ReferencedColumn.Name, SqlOperators.Equal, mcr2.Name.Trim('\"'),null); decimal d; object o; if (decimal.TryParse(mcr2.Name.Trim('\"'), out d)) { o = d; } else { o = (object)mcr2.Name.Trim('\"'); } jcg.And(mcr2.ReferencedColumn.Name, SqlOperators.Equal, o, null); } else { jcg.And(mcr2.Column.Name, SqlOperators.Equal, mcr2.ReferencedColumn.Name); } } } return(jcg); } throw new ArgumentException(string.Format("The Column '{0}' in the table '{1}' must be a foreign key or primary key", FromField.Name, FromTable.Fullname), "FromField"); }