具有多对多关系的鉴别器EF Core 6

khbbv19g  于 2022-10-15  发布在  PostgreSQL
关注(0)|答案(1)|浏览(227)

我正在尝试与EfCore6中的分销商(我想)建立关系
我通过使用实体Tagging定义的多对多关系将UsersPostsGroups链接到多个Tag。我们使用的是PostgreSQL。
我想不出该如何维持这段关系

public class User {
  public long Id {get; set;}
  // other properties

  public ICollection<Tag> Tags {get; set;}
}
public class Group{
  public long Id {get; set;}
  // other properties
}
public class Post {
  public long Id {get; set;}
  // other properties
}
public class Tag {
  public long Id {get; set;}
  public string Name {get; set;}
}
public class Tagging {
  public long Id {get; set;}
  public long TagId {get; set;}
  public long TaggableId {get; set;}
  public string TaggableType {get; set;}
}
builder.Entity<User>()
    .HasMany(u => u.Tags)
    .WithMany(t => t.Users)
    .UsingEntity<Tagging>(
      j => j
        .HasOne(ta => ta.Tag)
        .WithMany(t => t.Taggings)
        .HasForeignKey(ta => ta.TagId),
      j => j
        .HasOne(ta => ta.User)
        .WithMany(u => u.Taggings)
        .HasForeignKey(ta => ta.TaggableId),
      j =>
      {
        j.HasKey(ta => ta.Id);
      }
    );

如果TaggingsTaggableType属性
1.为User,则TaggableId必须指向User
1.为Post,则TaggableId必须指向Post
1.为Group,则TaggableId必须指向Group
我读过关于TPT和TPH的文章,但我有点迷茫。
我尝试使用hasQueryFilter,但因为它是通用查询文件管理器,所以它适用于PostGroup

jv4diomz

jv4diomz1#

您希望使用继承,因为TPH是EF6的默认设置。有关详细信息,请参阅documentation。但主要思想是一个(甚至可能是抽象的)类Tagging,其中有3个独立的类继承自它。

相关问题