MySqlException: «Ограничение внешнего ключа неправильно сформировано» в самореференционной таблице - PullRequest
0 голосов
/ 03 августа 2020

Я хочу создать таблицу элементов меню, в которой каждый элемент имеет родительский элемент и коллекцию дочерних элементов. EF Core 3.1 выполняет миграцию нормально, но при обновлении базы данных MySql выдает ошибку:

Failed executing DbCommand (21ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE `MenuItem` (
    `Id` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
    `Created` datetime(6) NOT NULL,
    `Updated` datetime(6) NOT NULL,
    `Name` longtext CHARACTER SET utf8mb4 NULL,
    `Link` longtext CHARACTER SET utf8mb4 NULL,
    `IconId` varchar(255) CHARACTER SET utf8mb4 NULL,
    `ParentId` varchar(255) CHARACTER SET utf8mb4 NULL,
    `IsLong` tinyint(1) NOT NULL,
    `Type` int NOT NULL,
    `Published` tinyint(1) NOT NULL,
    `OrderIndex` int NOT NULL,
    CONSTRAINT `PK_MenuItem` PRIMARY KEY (`Id`),
    CONSTRAINT `FK_MenuItem_File_IconId` FOREIGN KEY (`IconId`) REFERENCES `File` (`Id`) ON DELETE RESTRICT,
    CONSTRAINT `FK_MenuItem_MenuItem_ParentId` FOREIGN KEY (`ParentId`) REFERENCES `MenuItem` (`Id`) ON DELETE RESTRICT
);
MySql.Data.MySqlClient.MySqlException (0x80004005): Can't create table `x`.`MenuItem` (errno: 150 "Foreign key constraint is incorrectly formed")
 ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Can't create table `x`.`MenuItem` (errno: 150 "Foreign key constraint is incorrectly formed")
   at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ResultSet.cs:line 49

MenuItemEntity:

    public class MenuItemEntity : Entity, IOrderedEntity, IPublishableEntity
    {
        public MenuItemEntity()
        {
            Children = new List<MenuItemEntity>();
        }
        public string Id { get; set; }
        public DateTime Created { get; set; }
        public DateTime Updated { get; set; }
        public string Name { get; set; }
        public string Link { get; set; }
        public FileEntity Icon { get; set; }
        
        [ForeignKey("ParentId")]
        public virtual MenuItemEntity Parent { get; set; }
        public virtual ICollection<MenuItemEntity> Children { get; set; }
        public bool IsLong { get; set; }

        public MenuItemsType Type { get; set; }
        public bool Published { get; set; }
        public int OrderIndex { get; set; }

        public override string ToString()
        {
            return Name;
        }
    }

1 Ответ

0 голосов
/ 04 августа 2020

Удаление базы данных и повторный запуск dotnet ef database update проблема решена, но это не решение для производства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...