Asp.net mvc 如何使用code first Fluent API将属性设置为一对一关系中的外键?

Asp.net mvc 如何使用code first Fluent API将属性设置为一对一关系中的外键?,asp.net-mvc,entity-framework-6,ef-fluent-api,Asp.net Mvc,Entity Framework 6,Ef Fluent Api,我有两个班级的学生和学生地址。学生有一个地址的地方。现在,我如何使用Fluent API将Student类的主键StudentId设置为StudentAddress类的外键。我想要一个不同的属性,例如StudentId将是StudentAddress中的外键。我该怎么做?我使用的是实体框架6。这是我的课 public class Student { public int StudentId { get; set; } public string StudentName { get

我有两个班级的学生和学生地址。学生有一个地址的地方。现在,我如何使用Fluent API将Student类的主键StudentId设置为StudentAddress类的外键。我想要一个不同的属性,例如StudentId将是StudentAddress中的外键。我该怎么做?我使用的是实体框架6。这是我的课

public class Student
{
    public int StudentId { get; set; }
    public string StudentName { get; set; }

    //Navigation property
    public virtual StudentAddress StudentAddress { get; set; }
}
public class StudentAddress
{

    public int StudentAddressId { get; set; }
    public int StudentId { get; set; }  //Set this property as a forign key
    public string Address { get; set; }
    //Navigation property
    public virtual Student Student { get; set; }

}

您可以使用以下代码轻松地完成此操作:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // Configure StudentId as PK for StudentAddress
    modelBuilder.Entity<StudentAddress>()
        .HasKey(e => e.StudentId);

    // Configure StudentId as FK for StudentAddress
    modelBuilder.Entity<Student>()
                .HasOptional(s => s.Address) 
                .WithRequired(ad => ad.StudentId); 

}
有关更多信息:

希望以上信息有帮助

谢谢


Karthik

你不能那样做。一般的技巧是使StudentAddress的StudentId同时为PK和FK。是的,我也看到了。但我不确定是我的编码问题还是我遗漏了什么。非常感谢。
public class Student
{
    public Student() { }

    public int StudentId { get; set; }
    public string StudentName { get; set; }

    public virtual StudentAddress Address { get; set; }

}

public class StudentAddress 
{
    [Key, ForeignKey("Student")]
    public int StudentId { get; set; }

    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public int Zipcode { get; set; }
    public string State { get; set; }
    public string Country { get; set; }

    public virtual Student Student { get; set; }
}