private void WriteManyToManyInitialize(DatabaseTable foreignKey) { //look over the junction table to find the other many-to-many end var target = foreignKey.ManyToManyTraversal(_table); if (target == null) { return; } var propertyName = _codeWriterSettings.Namer.NameCollection(target.NetName); var dataType = "List<" + target.NetName + ">"; _cb.AppendLine(propertyName + " = new " + dataType + "();"); }
private void WriteManyToManyForeignKeyCollection(DatabaseTable foreignKeyChild) { var otherEnd = foreignKeyChild.ManyToManyTraversal(_table); _cb.AppendLine("// Many to many foreign key to " + otherEnd.Name); var childClass = otherEnd.NetName; var propertyName = _codeWriterSettings.Namer.NameCollection(childClass); var reverseName = _codeWriterSettings.Namer.NameCollection(_table.NetName); var sb = new StringBuilder(); sb.AppendFormat(CultureInfo.InvariantCulture, "HasMany(x => x.{0})", propertyName); sb.AppendFormat(CultureInfo.InvariantCulture, ".WithMany(z => z.{0})", reverseName); _cb.AppendLine(sb.ToString()); using (_cb.BeginBrace(".Map(map => ")) { _cb.AppendLine("map.ToTable(\"" + foreignKeyChild.Name + "\");"); //left key = HasMany side var cols = foreignKeyChild.ForeignKeys .First(x => x.RefersToTable == _table.Name) .Columns.Select(x => '"' + x + '"') .ToArray(); var leftColumns = string.Join(", ", cols); _cb.AppendLine("map.MapLeftKey(" + leftColumns + ");"); //right key = WithMany side cols = foreignKeyChild.ForeignKeys .First(x => x.RefersToTable == otherEnd.Name) .Columns.Select(x => '"' + x + '"') .ToArray(); var rightColumns = string.Join(", ", cols); _cb.AppendLine("map.MapRightKey(" + rightColumns + ");"); } _cb.AppendLine(");"); }
private void WriteManyToManyCollection(DatabaseTable foreignKey) { //look over the junction table to find the other many-to-many end var target = foreignKey.ManyToManyTraversal(_table); if (target == null) { Debug.WriteLine("Can't navigate the many to many relationship for " + _table.Name + " to " + foreignKey.Name); return; } var propertyName = _codeWriterSettings.Namer.NameCollection(target.NetName); var dataType = "ICollection<" + target.NetName + ">"; _cb.AppendAutomaticCollectionProperty(dataType, propertyName, IsNHibernate()); }