我有一个类Tenant,它通过数据库中的TenantUser表链接到User。 这种关系很多=>很多,虽然我实际上只想以一种方式公开映射。
租客有财产
virtual ICollection<User> Users { get; set; }
User类没有返回属性。
是否可以使用属性或流畅的API映射租户的Users属性,以便它通过TenantUser表收集特定租户的用户。
这可能,或者User类是否需要Tenant集合才能指定任何类型的映射?
我也会(可选)拥有
DbSet<TenantUser>
在上下文中管理中间表,但为方便起见,我希望在Tenant类上可以访问该属性。
感谢。
答案 0 :(得分:4)
您可以在Fluent API中定义多对多映射,如果在模型类中只公开一个集合,也可以这样做:
modelBuilder.Entity<Tenant>()
.HasMany(t => t.Users)
.WithMany()
.Map(x =>
{
x.MapLeftKey("TenantId");
x.MapRightKey("UserId");
x.ToTable("TenantUser");
});
您无法使用数据注释定义此关系。
请注意,Entity Framework中的多对多关系中没有TenantUser
实体。因此,您无法在上下文中创建DbSet<TenantUser>
来管理链接表。当您通过在Tenant.Users
集合中添加和删除元素来添加或删除关系时,EF会在内部管理此表。