2010-08-12 55 views
0

我想添加一个映射到表IdentityGroup,它有ManyToMany IdentityUsers认为表IdentityGroupIdentitiy表。但是,当我添加映射。结果似乎是一个像交叉连接的东西。NHibertnate映射HasManyToMany结果CROSS JOIN

为一组与两个用户预期的结果:

Group 1: 
    User 1 
    User 2 

目前的结果为一组有两个用户:

Group 1: 
    User 1 
    User 2 
Group 1: 
    User 1 
    User 2 

我的映射是这样的:

mapping.HasManyToMany<IdentityUser>(x => x.Users) 
     .Table("IdentityGroupIdentity") 
     .ParentKeyColumn("identityGroup_cid") 
     .ChildKeyColumn("identity_cid"); 

代码取数据:

public IQueryable<T> Find<T>(params string[] propertiesToLoad) 
{ 
    var query = session.Linq<T>(); 
    foreach (var propName in propertiesToLoad) 
     query.Expand(propName); 

     if (typeof(T) is ISoftDeletable) 
      query.Where(x => !(x as ISoftDeletable).IsDeleted); 
     return query; 
} 

[...] 

public IQueryable<IdentityGroup> Groups 
{ 
    get { return Find<IdentityGroup>(new string[] { "DefaultOrganization", "DefaultLocation", "Users" }); } 
} 

蚂蚁的想法?

+0

您可以发布您使用获取组的代码吗?我怀疑你可能需要使用DistinctRootEntityTransformer来扁平化对象图表,如果你急切地加载用户和组。 – DanP 2010-08-12 10:57:40

+0

编辑该帖子 – dale 2010-08-12 11:17:10

回答

0

解决不提取用户属性时“扩展”...