Ошибка: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено - PullRequest
0 голосов
/ 01 апреля 2019

Я все еще изучаю EF Core, и у меня возникает ошибка при попытке вставить только пользовательские данные (без BusinessUserProfile и BusinessCompany) в базу данных.У меня есть следующие таблицы: User, BusinessUserProfile и BusinessCompany.Отношение: у пользователя есть один BusinessUserProfile, у BusinessCompany есть несколько BusinessUserProfile.

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

Класс модели пользователя:

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }

    public BusinessUserProfile BusinessUserProfile { get; set; }

    public User()
    {
        BusinessUserProfile = new BusinessUserProfile();
    }
}

Класс модели BusinessUserProfile:

public class BusinessUserProfile
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public BusinessCompany BusinessCompany { get; set; }
    public int BusinessCompanyId { get; set; }

    public User User { get; set; }
    public int UserId { get; set; }
}

}

Класс модели BusinessCompany:

public class BusinessCompany
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<BusinessUserProfile> BusinessUserProfiles { get; set; }

    public BusinessCompany()
    {
        BusinessUserProfiles = new Collection<BusinessUserProfile>();
    }
}

DataContext.cs:

modelBuilder.Entity<User>()
            .HasOne(u => u.BusinessUserProfile)
            .WithOne(bup => bup.User)
            .HasForeignKey<BusinessUserProfile>(bup => bup.UserId);

modelBuilder.Entity<BusinessCompany>()
            .HasMany(bc => bc.BusinessUserProfiles)
            .WithOne(bup => bup.BusinessCompany)
            .HasForeignKey(bup => bup.BusinessCompanyId);

Когда я добавляю пользователя в базу данных,я получил сообщение об ошибке: MySqlException: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (mydb. businessuserprofiles, CONSTRAINT FK_BusinessUserProfiles_BusinessCompanies_BusinessCompanyId FOREIGN KEY (BusinessCompanyId) ССЫЛКИ businesscompanies (id) ВКЛУДАЛИТЬ C).

Может кто-нибудь посоветовать мне это?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Вы сделали в User классе BusinessUserProfile.Поэтому, если вы пытаетесь создать пользователя без существующего BusinessUserProfile, это все равно, что пытаться вставить нулевой fk.Что вы не позволили.

0 голосов
/ 01 апреля 2019

Этот тип ошибки обычно возникает, когда у дочерней таблицы есть запись внешнего ключа, которая указывает на родительскую запись, которая по какой-то причине больше не существует.В вашем конкретном случае это обычно означает, что в таблице BusinessUserProfile имеется одна или несколько записей, ссылающихся на запись в таблице BusinessCompany, которая больше не существует.

Вот запрос, который вы можетевыполните для отметки некоторых потерянных дочерних записей:

SELECT *
FROM BusinessUserProfile bup
WHERE NOT EXISTS (SELECT 1 FROM BusinessCompany bc
                  WHERE bc.id = bup.BusinessCompanyId);

Если этот запрос включает записи, то он объясняет ваши наблюдения.Если нет, то, по крайней мере, вы можете исключить эту возможность.

...