如何在依赖实体中没有导航 属性 的情况下创建一对一关系
How do i create One-to-One to relationship without having navigation property in dependent entity
我理解以下代码在主体和依赖实体之间创建 "One-to-One relationship"。
不过我想问一下:
是否可以在依赖实体中不包含导航 属性 来创建一对一关系?
如果是,我应该如何重写下面的代码?
public class Student
{
[Key]
public int Id { get; set; }
public string FullName { get; set; }
public StudentReport StudentReport { get; set; }
}
public class StudentReport
{
[Key, ForeignKey("Student")]
public int Id { get; set; }
public string RollNumber { get; set; }
public string StudentType { get; set; }
public Student Student { get; set; }
}
要在从属端创建没有导航 属性 的一对一关系,您需要使用 fluent API。例如,在您的 DbContext
class 中,您可以覆盖 OnModelCreating
并使用它来定义关系:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// I'm assuming the report is optional
modelBuilder.Entity<Student>()
.HasOptional(t => t.StudentReport)
.WithRequired();
}
public class StudentReport
{
public int Id { get; set; }
public string RollNumber { get; set; }
public string StudentType { get; set; }
}
请参阅 WithRequired()
here
的文档
我理解以下代码在主体和依赖实体之间创建 "One-to-One relationship"。
不过我想问一下:
是否可以在依赖实体中不包含导航 属性 来创建一对一关系?
如果是,我应该如何重写下面的代码?
public class Student { [Key] public int Id { get; set; } public string FullName { get; set; } public StudentReport StudentReport { get; set; } } public class StudentReport { [Key, ForeignKey("Student")] public int Id { get; set; } public string RollNumber { get; set; } public string StudentType { get; set; } public Student Student { get; set; } }
要在从属端创建没有导航 属性 的一对一关系,您需要使用 fluent API。例如,在您的 DbContext
class 中,您可以覆盖 OnModelCreating
并使用它来定义关系:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// I'm assuming the report is optional
modelBuilder.Entity<Student>()
.HasOptional(t => t.StudentReport)
.WithRequired();
}
public class StudentReport
{
public int Id { get; set; }
public string RollNumber { get; set; }
public string StudentType { get; set; }
}
请参阅 WithRequired()
here