c# - Entity Framework 6 FluentApi 一对一关系配置

标签 c# .net entity-framework entity-framework-6

[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 在不在数据库中的实体上形成一对一关系。

https://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx

关于c# - Entity Framework 6 FluentApi 一对一关系配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65362819/

相关文章:

.net - 在 Azure 中运行控制台应用程序 - 无需 WebJobs

c# - 使用 Entity Framework 4.1 将位字段参数传递给存储过程

c# - Entity Framework 中的 CTE Sql 查询支持 <DefiningQuery>

c# - 在java中读取c#二进制文件

c# - 如何隐藏excel列?

c# - 如何在 FitNesse 中使用 ArrayFixture?

c# - 将文件保存到 ftp 服务器

c# - 以斜线为背景的形状

c# - 为什么 Math.Pow(x, 2) 没有针对 x * x 进行优化,既不是编译器也不是 JIT?

c# - 数据库恢复后, Entity Framework 有时无法识别过去的迁移