gpt4 book ai didi

c# - EF6如何映射这种零或一对一关系

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:27 24 4
gpt4 key购买 nike

这是代码优先。

此关系的正确 Fluent 或数据注释是什么?

获取 EF 映射错误:无法确定类型“Model.SchoolInfo”和“Model.School”之间关联的主体端。该关联的主体端必须使用关系流畅的 API 或数据注释进行显式配置。

如果我添加

modelBuilder.Entity<School>().HasOptional(s => s.SchoolInfo).WithRequired(ss => ss.School);

我得到这个错误:在模型生成期间检测到一个或多个验证错误:School_SchoolInfo_Target::多重性在关系“School_SchoolInfo”中的角色“School_SchoolInfo_Target”中无效。由于 Dependent Role 属性不是关键属性,因此 Dependent Role 的重数上限必须为“*”。

SQL 表

table School
(
int SchoolId not null PK
)

table SchoolInfo
(
int SchoolInfoId not null PK IDENTITY
int SchoolId not null FK UNIQUE
)

模型

class School
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
int schoolId;

virtual SchoolInfo SchoolInfo;
}

class SchoolInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
int schoolInfoId;

int schoolId;

virtual School School
}

最佳答案

如果你想实现1:1映射,表格应该是这样的:

Schools

SchoolInfoes

在这种情况下,您的实体类将如下所示:

public class School
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SchoolId { get; set; }

public virtual SchoolInfo SchoolInfo { get; set; }
}

public class SchoolInfo
{
[ForeignKey("School")]
public int SchoolInfoId { get; set; }

public virtual School School { get; set; }
}

您当前的表结构建议使用1:M 映射,为了将实体类映射到它,您需要做一些细微的更改:

public class School
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SchoolId;

public virtual IList<SchoolInfo> SchoolInfoes { get; set; }
}

public class SchoolInfo
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SchoolInfoId { get; set; }

public int SchoolId { get; set; }

public virtual School School { get; set; }
}

关于c# - EF6如何映射这种零或一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37394357/

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