代码首先让我疯狂的外键异常

时间:2011-11-13 10:39:04

标签: c# entity-framework entity-framework-4.1

这些是我的模型类:

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条记录。这如何违反外键约束?

2 个答案:

答案 0 :(得分:1)

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

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

要么是这样,要么在保存

之前需要自己将其设置为有效的唯一值

另类猜测:

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

答案 1 :(得分:0)

似乎EF已经在错误的方向上建立了关系。

User类应该具有Organization而不是OrganizationID。

组织类应该有一个用户列表。