C# 中的自关系

问题描述 投票:0回答:1

我有一个名为 Person 的类,它有一个名为 friends 的属性,其中有一个 Person 类型的列表。实际上,我将在 Person 类与其自身之间创建多对多关系

如何使用EntityFrameworkCodefirstSQL Server中为这种关系创建一个特殊的表(最好不要使用Fluent API)?

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Person> Friends { get; set; }
}

我尝试了Codefirst,但是未创建SQL Server数据库中的多对多关系表。唯一发生的事情是在 SQL Server 中创建一个名为 Person_ID 的列。它似乎只创建了一对一的关系。

SQL Server 人员数据表:

身份证 姓名 人员_ID
c# winforms entity-framework code-first self-reference
1个回答
0
投票

请记住,在关系数据库中没有一流的方法来建模对称关系。因此,如果 Alice 和 Bob 是朋友,则需要将 (Alice,Bob) 和 (Bob,Alice) 都存储在 Friendship 表中。否则你会在Alice的朋友下找到Bob,但在Bob的朋友下找不到Alice。

但对于最初的问题,默认情况下,集合导航属性将创建一对多关系。如果您想要多对多,则必须配置实体。不强制要求具有两个方向的集合导航属性。

所以类似:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Person> Friends { get; } = new List<Person>();
}

配置如下

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .HasMany(p => p.Friends)
            .WithMany()
            .UsingEntity(t => t.ToTable("Friendship"));
    }

© www.soinside.com 2019 - 2024. All rights reserved.