这些是我的模型类:
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.Organizations \”,列 'OrganizationId'。\ r \ n该声明已被终止。
这不奇怪吗?我只是添加一个组织。它可能有什么问题?
P.S:我的用户表确实有OrganizationId
,它是外键并指向Organization
表。到目前为止这么好但为什么抛出异常?我正在添加一个主Organization
条记录。这如何违反外键约束?
答案 0 :(得分:1)
我希望为组织生成数据库ID:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DisplayName("Organization Id")]
public int OrganizationId { get; set; }
要么是这样,要么在保存
之前需要自己将其设置为有效的唯一值名称Organization_Users
表明(或是)从组织表到用户(可能通过关系表)的关系。你有完整的代码吗?代码在数据库中有这种旧关系的残余吗?仅仅从C#代码中删除这种关系是不够的(因为数据库将继续检查约束,直到从实际数据库模式中删除未使用的字段/关系)。
答案 1 :(得分:0)
似乎EF已经在错误的方向上建立了关系。
User类应该具有Organization而不是OrganizationID。
组织类应该有一个用户列表。