使用实体框架进行身份危机的主键

时间:2014-01-30 18:49:27

标签: entity-framework

我正在使用代码第一实体框架来创建数据库。我有两个表,Assignment和AssignmentDetails,都有一个名为ID的主键。当EF创建表时,分配ID将成为标识,但AssignmentDetails ID不是。

以下是课程:

分配

public class Assignment
{
    public int ID { get; set;  }
    public string Line { get; set; }

    public AssignmentDetails Details { get; set; }
}

AssignmentDetails

public class AssignmentDetails
{
    public int ID { get; set; }
    public string Details { get; set; }

    [Required]
    public int AssignmentID { get; set; }
    public virtual Assignment Assignment { get; set; }
}

这是我的OnModelCreatingmethod

modelBuilder.Entity<Assignment>()
    .HasOptional(a => a.Details)
    .WithRequired(d => d.Assignment);

我不确定我是否正确设置了1到0..1的关系,这可能导致身份问题。

1 个答案:

答案 0 :(得分:0)

嗯,在这种情况下,其中一个ID是 PK IDENTITY ,另一个是 PK / FK (主键和外键同时存在) ,哦,是的)。

PK / FK与来自另一个实体的PK相关(它同时是实体上的PK,另一个实体的PK上的FK,即IDENTITY)。

PK的目的是唯一的,在这种情况下,它将是唯一的(因为你有1到0..1的关系)。

EF,懒惰,避免创造“无用的”PK和“无用的”FK,因为PK足以承担这两个角色。

这在开始时有点令人惊讶(并不总是你想要的),但它是连贯的。

在实践中:

Assignment1有Id ... 1.

AssignmentDetail只能有一个分配。因此,您可能有一个唯一的自动增量ID作为详细信息的pk +分配时的FK,或者只使用...分配的ID,它始终是唯一的(IDENTITY)。