SqlException:INSERT语句与FOREIGN KEY约束“ FK_Users_Companies_CompanyId”冲突

时间:2019-04-01 19:44:58

标签: c# sql-server entity-framework-core

我想在数据库中添加一个新用户,但例外。不幸的是,我对SQL Server和EF都是陌生的,但是寻找答案使我明白了问题出在SQL Server表中,并且在那里不可能连接用户和公司。我应该用IdCompanyId做些什么吗?

  

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 个答案:

答案 0 :(得分:1)

您的User类(显然与您的Users表相关)具有CompanyId的字段。根据该错误,您的数据库每次需要将正确的公司ID添加到数据库中。

如果在添加用户之前尚未将公司添加到“公司”表中,则插入将失败,并显示此错误。如果您在CompanyId字段中插入不带值的用户,则会发生此错误。

因此,正确的程序流程为:

  • 如果公司不存在,则将其添加到公司中
  • 获取正确的CompanyId
  • 在保存之前,将CompanyId添加到用户记录的CompanyId字段中。