这是Code-First。
这种关系的正确流利或数据注释是什么?
获取EF映射错误: 无法确定类型之间的关联的主要结束' Model.SchoolInfo'和' Model.School'。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。
如果我添加
modelBuilder.Entity<School>().HasOptional(s => s.SchoolInfo).WithRequired(ss => ss.School);
我收到此错误: 在模型生成期间检测到一个或多个验证错误:School_SchoolInfo_Target :: Multiplicity在Role&School_SchoolInfo_Target&#39;在关系&school; School_SchoolInfo&#39;。由于“从属角色”属性不是关键属性,因此从属角色的多重性的上限必须为“&#39; *&#39;”。
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
}
答案 0 :(得分:3)
如果您想实施 1:1映射,这就是表格的样子:
在这种情况下你的实体类看起来像这样:
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; }
}
答案 1 :(得分:0)
您可以考虑审核您的实体关系数据模型。尝试删除SchoolInfoId字段(您实际上并不需要它),只需使用学校ID FK作为PK。这将使您的数据模型保持一致。