我有两个单独的集合,例如“集团”和“品牌”,这两者之间存在多对多关系。由于这是两个单独的聚合,因此我分别创建了单独的桥接实体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));
}
}
但是,当我尝试添加没有相应品牌组的新品牌或组时,这样做可以节省很多。但是,如果我尝试通过“品牌”或“组”添加品牌组关系,则会返回错误:
类型'GroupBrand'的实体与类型'BrandGroup'的实体共享表'Configuration.BrandGroup',但是没有具有相同键值且被标记为'Added'的该类型的实体。 / p>
我不太确定自己缺少什么。
答案 0 :(得分:1)
实体框架抱怨状态无效。
基本上,它会看到已添加BrandGroup
,但是GroupBrand
中没有相同的实体。但是它们是同一张桌子。
那么根据Entity Framework,是否添加了某些内容?如果查看BrandGroup
,则可能得出结论:已添加了某些内容,但是如果查看了GroupBrand
,则未添加任何内容。因此存在冲突。
通常在多对多关系中,您会遇到类似的情况
╔════════════╗
Group ═╣ GroupBrand ╠═ Brand
╚════════════╝
因此,Brand
对象和Group
对象都将具有GroupBrand
对象的集合。
因此,我只有一个或另一个,而不是拥有GroupBrand和BrandGroup。