Fluent API 一对一关系映射

Fluent API one to one relationship mapping

我正在尝试使用 Fluent API 建立 "One to one" 关联。这是我的 类 :

public class Person
{
    public Guid Id { get; set; }
    public Guid ProfilId { get; set; }

    public DateTime InsertDate { get; set; }
    public DateTime UpdateDate { get; set; }

    public virtual Profil Profil { get; set; }
}

public class Profil
{
    public Guid Id { get; set; }

    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public DateTime BirthDate { get; set; }
    public String Email { get; set; }

    public virtual Person Person { get; set; }
}

public class PersonMap : EntityTypeConfiguration<Person>  
{
    public PersonMap()
    {

        ...

        ToTable("Person");

        HasRequired(t => t.Profil)
              .WithOptional(c => c.Person)
              .Map(m => m.MapKey("ProfilId")); 
    }  
}

此实现抛出异常Invalid column name 'ProfilId'.

有人能告诉我如何使用这些 类 建立具有 1-1 关系的映射吗?

谢谢

配置一对一关系时,Entity Framework要求依赖的主键也是外键,所以可以使用Data Annotations[=27]映射关系=]如下:

public class Person
{
    [Key]
    [ForeignKey("Profil")]
    public Guid ProfilId { get; set; }

    public DateTime InsertDate { get; set; }
    public DateTime UpdateDate { get; set; }

    public virtual Profil Profil { get; set; }
}

或使用 Fluent Api:

  HasKey(t=>t.ProfilId);
  HasRequired(t => t.Profil).WithOptional(c => c.Person);

编辑 1:

好吧,EF 允许您在两个具有自己的 PK 的实体之间创建一对一关系,但您不能使用 FK 属性,因此,删除 ProfileId Person 实体并以这种方式配置关系:

HasRequired(t => t.Profil).WithOptional(c => c.Person);

MapKey方法用于更改数据库中的外键名称,但是你的实体中不能有同名的属性,否则会异常抛出。