一对多关系映射:无法添加或更新子行:外键约束失败

本文关键字:约束 更新 失败 映射 关系 添加 一对多 | 更新日期: 2023-09-27 18:12:36

我正在制作一个简单数据库结构的映射,但无法找出错误所在。公司和用户之间是一对多的关系。一家公司可以有很多用户。在数据库结构中,这是一种非标识关系,用户端的companyID是可选的(在我的数据库和我的实体中)。

下面是我的代码: 用户实体

public class User
    {
        public int userID { get; set; }
        public int? companyID { get; set; }
        public virtual Company Company { get; set; }
    }

公司实体
public class Company
{
    public int companyID { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

映射上下文
   public class FreelauncherContext : DbContext
   {
    public IDbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<Company> Companies { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        /*************USERS**************/
        modelBuilder.Entity<User>().HasKey(t => t.userID);
        modelBuilder.Entity<User>().ToTable("user", "freelauncher");
        modelBuilder.Entity<User>().Property(t => t.companyID).HasColumnName("company_id");
        modelBuilder.Entity<User>().HasOptional(t => t.Company).WithMany(t => t.Users).HasForeignKey(t => t.companyID); 
        /*************COMPANY**************/
        modelBuilder.Entity<Company>().HasKey(t => t.companyID);
        modelBuilder.Entity<Company>().ToTable("company", "freelauncher");
     }

由于我在这里没有看到任何错误,我一直在我的数据库中搜索错误,但我找不到任何…

有什么建议吗?

编辑

当我删除关系和与关系相关的id并执行插入时,没有错误并且插入被保存

一对多关系映射:无法添加或更新子行:外键约束失败

在实体User companyID的可选int中,我将该行改为==>

    public Nullable<int> companyID { get; set; }

我不能解释它有什么不同,但现在它工作得很好