protected virtual IEnumerable <MigrationOperation> Add([NotNull] IForeignKey target, [NotNull] DiffContext diffContext) { var declaringRootEntityType = target.DeclaringEntityType.RootType(); var targetEntityTypeAnnotations = Annotations.For(declaringRootEntityType); var targetPrincipalEntityTypeAnnotations = Annotations.For(target.PrincipalEntityType.RootType()); var operation = new AddForeignKeyOperation { Schema = targetEntityTypeAnnotations.Schema, Table = targetEntityTypeAnnotations.TableName, Name = Annotations.For(target).Name, Columns = GetColumns(target.Properties), PrincipalSchema = targetPrincipalEntityTypeAnnotations.Schema, PrincipalTable = targetPrincipalEntityTypeAnnotations.TableName, PrincipalColumns = GetColumns(target.PrincipalKey.Properties), OnDelete = target.DeleteBehavior == DeleteBehavior.Cascade ? ReferentialAction.Cascade : target.DeleteBehavior == DeleteBehavior.SetNull ? ReferentialAction.SetNull : ReferentialAction.Restrict }; CopyAnnotations(MigrationsAnnotations.For(target), operation); var createTableOperation = diffContext.FindCreate(declaringRootEntityType); if (createTableOperation != null) { createTableOperation.ForeignKeys.Add(operation); } else { yield return(operation); } }
protected virtual IEnumerable <MigrationOperation> Add(IForeignKey target, DiffContext diffContext) { var declaringRootEntityType = target.DeclaringEntityType.RootType(); var targetEntityTypeAnnotations = Annotations.For(declaringRootEntityType); var targetPrincipalEntityTypeAnnotations = Annotations.For(target.PrincipalEntityType.RootType()); // TODO: Set OnDelete (See #1084) var operation = new AddForeignKeyOperation { Schema = targetEntityTypeAnnotations.Schema, Table = targetEntityTypeAnnotations.TableName, Name = Annotations.For(target).Name, Columns = GetColumns(target.Properties), PrincipalSchema = targetPrincipalEntityTypeAnnotations.Schema, PrincipalTable = targetPrincipalEntityTypeAnnotations.TableName, PrincipalColumns = GetColumns(target.PrincipalKey.Properties) }; CopyAnnotations(MigrationsAnnotations.For(target), operation); var createTableOperation = diffContext.FindCreate(declaringRootEntityType); if (createTableOperation != null) { createTableOperation.ForeignKeys.Add(operation); } else { yield return(operation); } }