我有一个Person类,它可以有Relatives,这是一种自引用的多对多关系(Relative也是一个Person(。我想维护这个人->关联映射在单独的表中。因此,为了在EF中创建这种关系,我做了以下操作:
modelBuilder.Entity<Person>()
.HasMany(e => e.Relatives)
.WithMany()
.Map(c =>
{
c.MapLeftKey("PersonId");
c.MapRightKey("RelativeId");
c.ToTable("PersonRelative");
});
现在,这按照我的计划自动创建了一个新的表PersonRelative,其中有两列PersonId和RelativeId。它在PersonId和RelativeId上也有复合主键。
现在,我想在这里做两件事:
- 我想添加一个新身份"Id";列,以获得更好的性能。我该怎么做
- 现在,我可以为PersonRelative表创建一个单独的类吗?就像我们为每个表都创建一个类一样。因为这会再次尝试创建表。因此,我认为我可以保留流畅的api映射或PersonRelative类。这是正确的吗
如果有任何帮助,我将不胜感激。
您可以通过以下代码实现两点:
modelBuilder.Entity<PersonRelative>().HasKey(x => x.Id);
modelBuilder.Entity<PersonRelative>()
.HasOne<Person>(x => x.Person)
.WithMany(s => s.PersonRelative)
.HasForeignKey(x => x.PersonId);
modelBuilder.Entity<PersonRelative>()
.HasOne<Realtive>(x => x.Realtive)
.WithMany(s => s.PersonRelative)
.HasForeignKey(x => x.RelativeId);
它是如何在实体框架核心中建立多对多关系的,因为它在核心中还不支持,所以你也可以在非核心实体框架中使用它。
请注意,如果您只想要一个新的表映射来访问具有导航属性的数据,那么您可以添加类型为"的属性;ICollection";对于相对类的学生,与学生类相同,您可以添加ICollection以从学生访问亲属