我的场景是,我有两个名为Person和RelationshipMappings的表。 在Person表中,PersonId是主键。 在RelationshipMappings表中,有两个整数LeftPersonId和RightPersonId。 这两个ID都应该是PersonId的ForeignKeys。
我在Relationship模型中创建了两个名为LeftPerson和RightPerson的Person Properties,然后创建了如下所示的表关系。
entityBuilder
.HasOne(r => r.LeftPerson)
.WithMany(r => r.RelationshipMappings)
.HasForeignKey(r => r.LeftPersonId)
.HasConstraintName("FK_RelationshipMapping_LeftPerson");
entityBuilder
.HasOne(r => r.RightPerson)
.WithMany(r => r.RelationshipMappings)
.HasForeignKey(r => r.RightPersonId)
.HasConstraintName("FK_RelationshipMapping_RightPerson");
我应该在Person Model(LeftPerson和RightPerson)中有两个集合吗?因为现在我在PersonModel中只有一个集合。
public ICollection<RelationshipMapping> RelationshipMappings { get; set; }
此外,我也有PersonModel中提到的关系。
entityBuilder
.HasMany(e => e.RelationshipMappings)
.WithOne(e => e.LeftPerson);
entityBuilder
.HasMany(e => e.RelationshipMappings)
.WithOne(e => e.RightPerson);
由于某种原因它不起作用。它无法创建表和之后的所有内容。我看不到异常。我试图找出它。
有人可以帮我吗?
答案 0 :(得分:0)
好的,我找到了解决方案。我不得不将删除行为添加到外键中。
entityBuilder
.HasOne(r => r.LeftPerson)
.WithMany(r => r.LeftRelationshipMappings)
.HasForeignKey(r => r.LeftPersonId)
.HasConstraintName("FK_RelationshipMapping_LeftPerson")
.OnDelete(DeleteBehavior.Restrict);
entityBuilder
.HasOne(r => r.RightPerson)
.WithMany(r => r.RightRelationshipMappings)
.HasForeignKey(r => r.RightPersonId)
.HasConstraintName("FK_RelationshipMapping_RightPerson")
.OnDelete(DeleteBehavior.Restrict);
现在一切都按预期工作了。我必须有两个收藏品。它不适用于一个集合。它会给出以下错误。
Cannot create a relationship between 'Person.RelationshipMappings' and 'RelationshipMapping.RightPerson', because there already is a relationship between 'Person.RelationshipMappings' and 'RelationshipMapping.LeftPerson'. Navigation properties can only participate in a single relationship.
感谢您的评论。