强制 HasMany() 使用关联 table

force HasMany() to use an association table

这里是第一个问题,即使我多年来一直在浏览堆栈。

我对 Entity Framework 和迁移有疑问,更准确地说是映射。 我很清楚所有关于多对多、一对多、关联 table 之类的问题,但我还没有找到针对这个特定问题的解决方案:

这些是我的 POCO:

public class A
{
    public virtual long Id {get; set;}

    public virtual ICollection<B> B {get; set;}
}

public class B
{
    public virtual long Id {get; set;}

    // Not relevant stuff ...
}

我想强制映射给我一个关联 table,可能看起来像这样:

-----------   -----------   -----------
| TABLE A |   | TABLE AB|   | TABLE B |
-----------   -----------   -----------
| ID      |   | FK_A_ID |   | ID      |
-----------   | FK_B_ID |   -----------
              -----------

我的第一反应是使用这种映射:

modelBuilder.Entity<A>()
                .HasMany(x => x.B)
                .WithMany()
                .Map(x =>
                {
                    x.ToTable("AB");
                    x.MapLeftKey("Id");
                    x.MapRightKey("Id");
                });

不幸的是,这并没有给我所需的数据库映射,因为它在 table A 引用 B.Id 中创建了一个外键。另外,我不想在 B class 中的 A 上有一个 属性。有关信息,目标数据库是 SqlServer。

有没有正确的方法来做到这一点?

注意:我的母语不是英语,如有错误请见谅。

不确定您为什么要尝试实现该目标,但这是可能的。

我想到的假设是您既不能编辑 A 也不能编辑 B 但您想要很多很多的关系...所以这是一个解决方案:

只需创建一个 ID 为 AB 的 class AB,然后使用装饰器

定义键和鉴别器
class AB {
    virtual public A ALink {get; set;}
    [Key, Column(Order = 0)]
    public int ALinkId {get; set;}

    virtual public B BLink {get; set;}
    [Key, Column(Order = 1)]
    public it BLinkId {get; set;}
}