代码首先用外键异常使我发疯

本文关键字:异常 发疯 代码 | 更新日期: 2023-09-27 18:14:16

这些是我的模型类:

public class Organization
{
        public Organization()
        {
        }
        [DisplayName("Organization Id")]
        public int OrganizationId { get; set; }
        [StringLength(128)]
        [DisplayName("Organization Name")]
        public string Name { get; set; }
}
public class User 
{
        public User()
        {
            Roles = new List<Role>();
        }
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
        [Key]
        public Guid UserGuid { get; set; }
        [StringLength(25)]
        public string FirstName { get; set; }
        [StringLength(25)]
        public string LastName { get; set; }
        public virtual List<Role> Roles { get; set; }
        public int OrganizationId { get; set; }
        [ForeignKey("OrganizationId")]
        public virtual Organization Organization { get; set; }
    }

这是我的代码:

 Organization organization = new Organization { Name = "Test", };
 context.Organizations.Add(organization);

我得到这个:

INSERT语句与FOREIGN KEY约束冲突Organization_Users '"'"。数据库发生冲突'"SampleDB'",表'"dbo"。组织'",列"OrganizationId"。'r'n语句已被终止。

这不是很奇怪吗?我只是添加了一个组织。这里面会有什么问题呢?

p。S:我的用户表确实有OrganizationId,它是指向Organization表的外键。到目前为止一切顺利,但是为什么会抛出异常呢?我正在添加一个主Organization记录。这怎么违反外键约束呢?

代码首先用外键异常使我发疯

我希望也为组织生成数据库id:

   [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
   [DisplayName("Organization Id")]
   public int OrganizationId { get; set; }

或者在保存

之前,您需要将其设置为一个有效的、唯一的值。

替代猜:

名称Organization_Users表明存在(或曾经)从Organization表到Users的关系(可能通过关系表)。你有展示完整的代码吗?代码中是否有数据库中这种旧关系的残余?仅仅从c#代码中删除这些关系是不够的(因为数据库将继续检查约束,直到未使用的字段/关系从实际数据库模式中删除)。

看来EF在错误的方向上建立了这种关系。

User类应该有一个组织,而不是一个组织id。

Organization类应该有一个用户列表