代码首先用外键异常使我发疯
本文关键字:异常 发疯 代码 | 更新日期: 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类应该有一个用户列表