public void Can_add_and_remove_foreign_key_builders() { var entityType = new EntityType(); var mockForeignKeyBuilder = new Mock <ForeignKeyBuilder>(); entityType.AddForeignKey(mockForeignKeyBuilder.Object); Assert.Same(mockForeignKeyBuilder.Object, entityType.ForeignKeyBuilders.Single()); mockForeignKeyBuilder.Verify(fk => fk.SetOwner(entityType)); entityType.RemoveForeignKey(mockForeignKeyBuilder.Object); mockForeignKeyBuilder.Verify(fk => fk.SetOwner(null)); }
public void Can_add_and_remove_foreign_key_builders() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var mockForeignKeyBuilder = new Mock<ForeignKeyBuilder>(); entityType.AddForeignKey(mockForeignKeyBuilder.Object); Assert.Same(mockForeignKeyBuilder.Object, entityType.ForeignKeyBuilders.Single()); mockForeignKeyBuilder.Verify(fk => fk.SetOwner(entityType)); entityType.RemoveForeignKey(mockForeignKeyBuilder.Object); mockForeignKeyBuilder.Verify(fk => fk.SetOwner(null)); }
public static void RemoveAllForeignKeyConstraintsForColumn( EntityType table, EdmProperty column, DbDatabaseMapping databaseMapping) { DebugCheck.NotNull(table); DebugCheck.NotNull(column); DebugCheck.NotNull(databaseMapping); table.ForeignKeyBuilders .Where(fk => fk.DependentColumns.Contains(column)) .ToArray() .Each( fk => { table.RemoveForeignKey(fk); var copiedFk = databaseMapping.Database.EntityTypes .SelectMany(t => t.ForeignKeyBuilders) .SingleOrDefault(fk2 => Equals(fk2.GetPreferredName(), fk.Name)); if (copiedFk != null) { copiedFk.Name = copiedFk.GetPreferredName(); } }); }
// <summary> // Moves a foreign key constraint from oldTable to newTable and updates column references // </summary> private static void MoveForeignKeyConstraint( EntityType fromTable, EntityType toTable, ForeignKeyBuilder fk) { DebugCheck.NotNull(fromTable); DebugCheck.NotNull(toTable); DebugCheck.NotNull(fk); fromTable.RemoveForeignKey(fk); // Only move it to the new table if the destination is not the principal table or if all dependent columns are not FKs // Otherwise you end up with an FK from the PKs to the PKs of the same table if (fk.PrincipalTable != toTable || !fk.DependentColumns.All(c => c.IsPrimaryKeyColumn)) { // Make sure all the dependent columns refer to columns in the newTable var oldColumns = fk.DependentColumns.ToArray(); var dependentColumns = GetDependentColumns(oldColumns, toTable.Properties); if (!ContainsEquivalentForeignKey(toTable, fk.PrincipalTable, dependentColumns)) { toTable.AddForeignKey(fk); fk.DependentColumns = dependentColumns; } } }