Неправильно сформирован внешний ключ - PullRequest
0 голосов
/ 19 января 2020

В моем приложении. NET core 3.0 я пытаюсь добавить поле с ограничением к моей переопределенной сущности ApplicationUser (переопределенной из IdentityUser). Моя база данных MySql.

Мои модели выглядят так:

using Microsoft.AspNetCore.Identity;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Cnock.Models
{
    public class ApplicationUser : IdentityUser
    {
        [Required]
        public DateTime CreatedDateTime { get; set; }

        [Required]
        public string FirstName { get; set; }

        [Required]
        public string Name { get; set; }
    }

    public class CatalogProductBid
    {
        public int Id { get; set; }

        [Required]
        public int CatalogProductId { get; set; }

        [ForeignKey("CatalogProductId")]
        public virtual CatalogProduct CatalogProduct { get; set; }

        [Required]
        public DateTime CreatedDateTime { get; set; }

        // Start added code
        [Required]
        public string UserId { get; set; }

        [ForeignKey("UserId")]
        public virtual ApplicationUser ApplicationUser { get; set; }
    }
}

Мой контекст базы данных выглядит следующим образом:

public class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        public DbSet<Category> Categories { get; set; }

        public DbSet<ProductImage> ProductImages { get; set; }

        public DbSet<Product> Products { get; set; }

        public DbSet<Country> Countries { get; set; }

        public DbSet<Catalog> Catalogs { get; set; }

        public DbSet<CatalogProduct> CatalogProducts { get; set; }

        public DbSet<ApplicationUser> ApplicationUsers { get; set; }

        public DbSet<ContactForm> ContactForms { get; set; }

        public DbSet<UserCatalog> UserCatalogs { get; set; }

        public DbSet<UserCatalogProduct> UserCatalogProducts { get; set; }

        public DbSet<Origin> Origins { get; set; }

        public DbSet<CatalogProductBid> CatalogProductBids { get; set; }
    }

Сгенерирован следующий код как миграция:

protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn<string>(
                name: "UserId",
                table: "CatalogProductBids",
                nullable: false,
                defaultValue: "");

            migrationBuilder.CreateIndex(
                name: "IX_CatalogProductBids_UserId",
                table: "CatalogProductBids",
                column: "UserId");

            migrationBuilder.AddForeignKey(
                name: "FK_CatalogProductBids_AspNetUsers_UserId",
                table: "CatalogProductBids",
                column: "UserId",
                principalTable: "AspNetUsers",
                principalColumn: "Id",
                onDelete: ReferentialAction.Cascade);
        }

При выполнении миграции я получаю ошибку:

CommandType='Text', CommandTimeout='30'] ALTER TABLE
`CatalogProductBids` ADD CONSTRAINT
`FK_CatalogProductBids_AspNetUsers_UserId` FOREIGN KEY (`UserId`)
REFERENCES `AspNetUsers` (`Id`) ON DELETE CASCADE;
MySql.Data.MySqlClient.MySqlException (0x80004005): Can't create table
`cnockbe`.`#sql-1e35_7f3` (errno: 150 "Foreign key constraint is
incorrectly formed")  ---> MySql.Data.MySqlClient.MySqlException
(0x80004005): Can't create table `cnockbe`.`#sql-1e35_7f3` (errno: 150
"Foreign key constraint is incorrectly formed") ```

Есть идеи, что может быть не так с этим? Спасибо!

...