gpt4 book ai didi

c# - Fluent API 一对一关系映射

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:05 25 4
gpt4 key购买 nike

我正在尝试使用 Fluent API 建立“一对一”关联。这是我的类(class):

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"));
}
}

此实现抛出异常无效的列名“ProfilId”。

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

谢谢

最佳答案

在配置一对一关系时, Entity Framework 要求依赖的主键也是外键,因此您可以使用Data Annotations映射关系,如下所示:

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 属性,因此,删除 Person 中的 ProfileId 实体并以这种方式配置关系:

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

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

关于c# - Fluent API 一对一关系映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31023961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com