我正在尝试与EfCore6中的分销商(我想)建立关系
我通过使用实体Tagging
定义的多对多关系将Users
、Posts
和Groups
链接到多个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);
}
);
如果Taggings
的TaggableType
属性
1.为User
,则TaggableId
必须指向User
1.为Post
,则TaggableId
必须指向Post
1.为Group
,则TaggableId
必须指向Group
我读过关于TPT和TPH的文章,但我有点迷茫。
我尝试使用hasQueryFilter
,但因为它是通用查询文件管理器,所以它适用于Post
和Group
。
1条答案
按热度按时间jv4diomz1#
您希望使用继承,因为TPH是EF6的默认设置。有关详细信息,请参阅documentation。但主要思想是一个(甚至可能是抽象的)类
Tagging
,其中有3个独立的类继承自它。