SqlException: оператор INSERT конфликтует с ограничением FOREIGN KEY "FK_Users_Companies_CompanyId" - PullRequest
0 голосов
/ 01 апреля 2019

Я хочу добавить нового пользователя в свою базу данных, но сделаю исключение.К сожалению, я новичок и в SQL Server, и в EF, но поиск ответа дал мне понять, что проблема где-то в таблицах SQL Server и невозможности подключения пользователя и компании там.Должен ли я что-то делать с Id или CompanyId или чем?

SqlException : оператор INSERT конфликтует с ограничением FOREIGN KEY "FK_Users_Companies_CompanyId".Конфликт произошел в базе данных «companiesdb», таблице «dbo.Companies», столбце «Id».Заявление было прекращено.

Код:

public class User
{
        public string Name { get; set; }
        public int Age { get; set; }
        public int CompanyId { get; set; } // for what???
        public Company Company { get; set; }
        public int Id { get; set; } //for what?
}

public class Company
{
        public int Id { get; set; } //for what?
        public string Name { get; set; }
        public List<User> Users { get; set; }

        public Company()
        {
            Users = new List<User>();
        }
}

using Microsoft.EntityFrameworkCore;

namespace DataApp1.Models
{
    public class UserDb : DbContext
    {
        public DbSet<User> Users { get; set; } //create db for users
        public DbSet<Company> Companies { get; set; } //and for companies they belong
        public UserDb(DbContextOptions<UserDb> options)
            : base(options)
        {
            Database.EnsureCreated();
        }
    }
}

1 Ответ

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

Ваш класс User, который, очевидно, относится к вашей таблице Users, имеет поле для CompanyId.На основании этой ошибки ваша база данных требует, чтобы в базу данных каждый раз добавлялся правильный идентификатор компании.

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

Таким образом, ваш правильный программный поток будет:

  • Добавить компанию в компании, если это не так* не существует
  • Получите правильный CompanyId
  • Добавьте CompanyId в поле CompanyId в записи пользователя перед сохранением.
...