Fluent Code First EF 4.3

时间:2012-03-10 13:15:59

标签: entity-framework orm mapping code-first

我有一个类Tenant,它通过数据库中的TenantUser表链接到User。 这种关系很多=>很多,虽然我实际上只想以一种方式公开映射。

租客有财产

virtual ICollection<User> Users { get; set; }

User类没有返回属性。

是否可以使用属性或流畅的API映射租户的Users属性,以便它通过TenantUser表收集特定租户的用户。

这可能,或者User类是否需要Tenant集合才能指定任何类型的映射?

我也会(可选)拥有

DbSet<TenantUser> 

在上下文中管理中间表,但为方便起见,我希望在Tenant类上可以访问该属性。

感谢。

1 个答案:

答案 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会在内部管理此表。