我正在尝试制作一对一的#34;使用Fluent API的关联。这是我的课程:
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关系的映射吗?
谢谢
答案 0 :(得分:1)
配置一对一关系时,Entity Framework要求从属关键字的主键也是外键,因此您可以使用数据注释映射关系,如下所示:
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);
嗯,EF允许您使用自己的PK在两个实体之间创建一对一的关系,但是您不能使用FK属性,因此,删除ProfileId
实体中的Person
和以这种方式配置关系:
HasRequired(t => t.Profil).WithOptional(c => c.Person);
MapKey
方法用于更改数据库中的外键名称,但您的实体中不能具有同名的属性,否则将引发异常。