[Table("Child", Schema = "dbo")]
public partial class Child
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int Id { get; set; }
public int? Parent1Id { get; set; }
public int? Parent2Id { get; set; }
public virtual Parent Parent1 {get; set}
public virtual Parent Parent2 {get; set}
}
[Table("Parent", Schema = "dbo")]
public partial class Parent
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int Id { get; set; }
public virtual Child Child1 { get; set; }
public virtual Child Child2 { get; set; }
//modelBuilder below would work if I had this
//public virtual ICollection<Child> Child1 { get; set; }
}
这意味着父子之间是一对一的关系。 Parent1Id 和 Parent2Id 可为空。
我只找到了一对多关系的示例(使用 FluentAPI),如果我有一个 Child in Parent 的集合,我必须这样做:
modelBuilder.Entity<Parent>()
.HasMany(e => e.Child1)
.WithOptional(e => e.Parent1)
.HasForeignKey(e => e.Parent1Id);
modelBuilder.Entity<Parent>()
.HasMany(e => e.Child2)
.WithOptional(e => e.Parent2)
.HasForeignKey(e => e.Parent2Id);
子级将有 2 个 FK 引用父级。 父级没有 FK 引用子级。
我的问题是,如何使用 EF 6.x 将其作为一对一关系来实现? 我看到了 HasOne() 方法,但它来自 EFCore,所以我在这个方法中没有选择。
谢谢
最佳答案
注意:从技术上讲,一对一关系在 MS SQL Server 中是不可能的。这些将始终是一对零或一的关系。 EF 在不在数据库中的实体上形成一对一关系。
关于c# - Entity Framework 6 FluentApi 一对一关系配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65362819/