流利的nhibernate映射多个表

时间:2015-10-19 11:25:22

标签: c# nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

我有一个UserEntity,映射得像   无法同时获取多个行李。 错误

public UserEntityMap : ClassMap<UserEntity>
{
   //Other properties
   HasMany(x => x.Addresses).KeyColumn("User_id").Fetch.Join();
   HasMany(x => x.Roles).KeyColumn("User_id").Fetch.Join();
}

我想在创建用户查询时获取地址和角色。 我该怎么做才能看到像

这样的输出
Select * from UserEntity u 
  join Addresses a on u.id=a.User_id 
  join Roles r on u.id=r.User_id where u.id=?

1 个答案:

答案 0 :(得分:2)

如何生成这样的SELECT语句是没有办法的。

我建议使用批量提取。有关详细信息,请参阅以下内容:

调整后的映射:

public UserEntityMap : ClassMap<UserEntity>
{
   //Other properties
   HasMany(x => x.Addresses)
       .KeyColumn("User_id").Fetch.Join()
       .BatchSize(100);
   HasMany(x => x.Roles)
       .KeyColumn("User_id").Fetch.Join()
       .BatchSize(100);
}

这将允许查询根实体,只有少数SELECTS也可以获得他们的集合(没有1 + N问题)

同时检查What is the solution for the N+1 issue in hibernate?