我将EntityFramework 6项目实现为EntityFramework Core。我必须将EF6关系模式迁移到EF核心。我在下面找到了一些参考:
- 实体框架核心零或一到零或一关系
但是对于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);
}