EF Core中必填项到可选项关系(一对零或一)的最佳方法是什么?



我将EntityFramework 6项目实现为EntityFramework Core。我必须将EF6关系模式迁移到EF核心。我在下面找到了一些参考:

  1. 实体框架核心零或一到零或一关系

但是对于EF-Core中的required-optional关系没有任何想法

Sample1.cs:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<StudentAddress>()
.HasRequired(x => x.Student)
.WithOptional(x => x.StudentAddress);
}
public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public virtual StudentAddress StudentAddress { get; set; }
}
public class StudentAddress
{
public int StudentId { get; set; }
public string State { get; set; }
public virtual Student Student { get; set; }
}

Sample2.cs:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<StudentAddress>()
.HasKey(sa => sa.StudentId);
modelBuilder.Entity<StudentAddress>()
.HasRequired(x => x.Student)
.WithOptional(x => x.StudentAddress);
}
public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public virtual StudentAddress StudentAddress { get; set; }
}
public class StudentAddress
{
public int StudentId { get; set; }
public string State { get; set; }
public virtual Student Student { get; set; }
}

请有人帮助我,如何在EF-Core使用流利的api

你可以试试这个(Ref.: docs):

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<StudentAddress>()
.HasOne(x => x.Student)
.WithOne(x => x.StudentAddress).IsRequired(false);
}

或者,您可以在Student模型中添加FKStudentAddressId,并将类型设置为可空int?

public class Student
{
public int StudentId { get; set; }

// This is the FK for StudentAddress.
// Make it int? (nullable) if StudentAddress is optional
public int? StudentAddressId { get; set; }
public virtual StudentAddress StudentAddress { get; set; }
}
public class StudentAddress
{
public int StudentId { get; set; }
public virtual Student Student { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Since the FK is nullable, you don't need the IsRequired(false)
modelBuilder.Entity<StudentAddress>()
.HasOne(x => x.Student)
.WithOne(x => x.StudentAddress);
}

相关内容

最新更新