EF类已被引用为FK不工作时的多对多

本文关键字:工作 FK 引用 EF | 更新日期: 2023-09-27 18:00:16

我正试图在PeoplePenguins之间创建一个实体框架many-to-many关系,其形式为通常的PenguinPeople表,其中包含Person_IdPenguin_Id。当我用下面的代码生成迁移时,many-to-many不会被创建。然而,如果我注释掉Penguin类中的3行"OwnerId",many-to-many就可以工作了。什么东西?他们应该是独立的。

public class Penguin
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public long OwnerId{ get; set; } //works if I comment this out
    [ForeignKey("OwnerId")] //works if I comment this out
    public Person Person{ get; set; } //works if I comment this out
    public virtual ICollection<Person> PenguinTrainers{ get; set; }
}
public class Person 
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public virtual ICollection<Person> People{ get; set; }
}

EF类已被引用为FK不工作时的多对多

如果您有

ICollection<Penguin> AssignedPenguins { get; set; }

在您的Person类上,并且仅在两个类上的Id属性,则它应该创建关联表。

我不知道是否有更简单的方法可以做到这一点,但我不得不使用EF文档中概述的FluentAPI。这个例子只是来自文档,因为很明显,我的企鹅/人模型只是代替了真正导致问题的模型:

modelBuilder.Entity<Post>() 
                .HasMany(p => p.Tags) 
                .WithMany(t => t.Posts) 
                .Map(mc => 
                   { 
                       mc.ToTable("PostTags"); 
                       mc.MapLeftKey("Post_Id"); 
                       mc.MapRightKey("Tag_Id"); 
                   });