2012-03-10 93 views
0

我有一个Tenant类,它通过数据库中的TenantUser表链接到用户。 这种关系很多=>很多,但我实际上只想以一种方式公开映射。Fluent Code First EF 4.3

租户有一个属性

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

用户类没有属性映射回去。

是否有可能使用属性或流利的API来映射租户的用户属性,以便通过TenantUser表收集特定租户的用户。

这是可能的,还是用户类需要一个租户集合,以指定任何类型的映射?

我也会(可选)在管理中介表上下文有

DbSet<TenantUser> 

,但为了方便,我想物业的租客类访问。

谢谢。

回答

4

您可以用流利的API定义了许多一对多的映射,也只有一个集合在模型类暴露:

modelBuilder.Entity<Tenant>() 
    .HasMany(t => t.Users) 
    .WithMany() 
    .Map(x => 
    { 
     x.MapLeftKey("TenantId"); 
     x.MapRightKey("UserId"); 
     x.ToTable("TenantUser"); 
    }); 

不能定义与数据注解了这种关系。

请注意,实体框架中的多对多关系中没有TenantUser实体。因此,您无法在上下文中创建DbSet<TenantUser>来管理链接表。当您通过在Tenant.Users集合中添加/删除元素来添加或删除关系时,EF在内部管理此表。

+0

对不起,花了这么长时间,我无法测试几天。很好的答案,谢谢。我没有想到WithMany()可以在没有参数的情况下被指定。这个流利的API有没有好的文档? – Jim 2012-03-14 13:50:18

+0

@Jim:Intellisense :)老实说,我只是通过试验,谷歌搜索以及在Intellisense中查找哪些方法可用等等,才想出了这些东西。官方文档,我认为,是这样的:http://msdn.microsoft.com/en-us/library/hh295844%28v=vs.103%29.aspx但我从来没有读过它。 – Slauma 2012-03-14 14:47:52