.net core EFCore将2个实体映射到同一个表-无法添加新条目

.net core EFCore将2个实体映射到同一个表-无法添加新条目,.net-core,entity-framework-core,ef-core-2.2,.net Core,Entity Framework Core,Ef Core 2.2,我有两个单独的集合,比如集团和品牌,这两者之间存在着多对多的关系。由于这是两个单独的聚合,我创建了单独的桥接实体,BrandGroup和GroupBrand。现在我想把这两个映射到同一个表。两个实体都位于相同的DbContext下。以下是我的实体配置: public class BrandGroupEntityTypeConfiguration : BaseEntityTypeConfiguration<BrandGroup> { public override void C

我有两个单独的集合,比如集团和品牌,这两者之间存在着多对多的关系。由于这是两个单独的聚合,我创建了单独的桥接实体,
BrandGroup
GroupBrand
。现在我想把这两个映射到同一个表。两个实体都位于相同的DbContext下。以下是我的实体配置:

public class BrandGroupEntityTypeConfiguration : BaseEntityTypeConfiguration<BrandGroup>
{
    public override void Configure(EntityTypeBuilder<BrandGroup> brandGroupConfiguration)
    {
        base.Configure(brandGroupConfiguration);
        brandGroupConfiguration.ToTable("BrandGroup");
        brandGroupConfiguration.Property(bc => bc.GroupId).IsRequired().HasColumnName(nameof(BrandGroup.GroupId));
        brandGroupConfiguration.Property(bc => bc.BrandId).IsRequired().HasColumnName(nameof(BrandGroup.BrandId));
        brandGroupConfiguration.HasIndex(bc => new { bc.GroupId, bc.BrandId }).IsUnique().HasFilter("[Deleted] = 0");
        brandGroupConfiguration.HasOne<GroupBrand>().WithOne().HasForeignKey<BrandGroup>(b => b.Id);
    }
}


public class GroupBrandEntityTypeConfiguration : BaseEntityTypeConfiguration<GroupBrand>
{
    public override void Configure(EntityTypeBuilder<GroupBrand> groupBrandConfiguration)
    {
        base.Configure(groupBrandConfiguration);
        groupBrandConfiguration.ToTable("BrandGroup");
        groupBrandConfiguration.Property(gb => gb.GroupId).IsRequired().HasColumnName(nameof(GroupBrand.GroupId));
        groupBrandConfiguration.Property(gb => gb.BrandId).IsRequired().HasColumnName(nameof(GroupBrand.BrandId));
    }
}
公共类BrandGroupEntityTypeConfiguration:BaseEntityTypeConfiguration
{
公共覆盖无效配置(EntityTypeBuilder brandGroupConfiguration)
{
配置(brandGroupConfiguration);
brandGroupConfiguration.ToTable(“BrandGroup”);
属性(bc=>bc.GroupId).IsRequired().HasColumnName(nameof(BrandGroup.GroupId));
属性(bc=>bc.BrandId).IsRequired().HasColumnName(nameof(BrandGroup.BrandId));
brandGroupConfiguration.HasIndex(bc=>new{bc.GroupId,bc.BrandId}).IsUnique().HasFilter(“[Deleted]=0”);
brandGroupConfiguration.HasOne().WithOne().HasForeignKey(b=>b.Id);
}
}
公共类GroupBrandEntityTypeConfiguration:BaseEntityTypeConfiguration
{
公共覆盖无效配置(EntityTypeBuilder groupBrandConfiguration)
{
配置(groupBrandConfiguration);
groupBrandConfiguration.ToTable(“BrandGroup”);
groupBrandConfiguration.Property(gb=>gb.GroupId).IsRequired().HasColumnName(nameof(GroupBrand.GroupId));
groupBrandConfiguration.Property(gb=>gb.BrandId).IsRequired().HasColumnName(nameof(GroupBrand.BrandId));
}
}
但是,当我尝试添加没有相应品牌组的新品牌或组时,它可以很好地节省成本。但是,如果我试图通过品牌或集团添加品牌-集团关系,它会返回一个错误:

“GroupBrand”类型的实体正在与“BrandGroup”类型的实体共享表“Configuration.BrandGroup”,但没有具有相同键值且标记为“Added”的此类实体


我不太确定我遗漏了什么。

实体框架正在抱怨状态无效

基本上,它看到添加了一个
BrandGroup
,但是
GroupBrand
中没有相同的实体。然而他们是同一张桌子

那么根据实体框架,是否添加了一些内容?如果它查看
BrandGroup
,可能会得出结论认为添加了一些内容,但如果查看
GroupBrand
,则没有添加任何内容。因此存在冲突

通常在多对多的关系中,你会有

       ╔════════════╗
Group ═╣ GroupBrand ╠═ Brand
       ╚════════════╝
因此,
Brand
对象和
Group
对象都有一组
GroupBrand
对象


因此,我不想拥有GroupBrand和BrandGroup,我只想拥有其中一个。

是的,我们最终就是这样做的。最初的想法是创建两个实体,这样单独的聚合就不需要知道另一个。