简体   繁体   English

NHibernate C#内部联接n + 1

[英]NHibernate C# inner join n+1

Here is my simple С# code: 这是我简单的С#代码:

var chests = _session.CreateCriteria<GameCharacterChest>()
    .CreateAlias("GameCharacterEquipments", "equip", JoinType.InnerJoin)
    .Add(Restrictions.Eq("GameCharacterId", characterId))
    .List<GameCharacterChest>();

foreach (var chest in chests)
{
    var equip = chest.GameCharacterEquipments.FirstOrNull();
    if (equip != null)
    {
        var slot = (equip as GameCharacterEquipment).GameCharacterSlotTypeId;
    } 
}

In foreach cycle NHibernate sends SQL query to my DB. foreach周期中,NHibernate将SQL查询发送到我的数据库。 Why? 为什么? information about GameCharacterEquipment already requested in first query by inner join. 内部GameCharacterEquipment在第一次查询中已经请求的有关GameCharacterEquipment信息。 I have fluent map. 我的地图很流利。

Try adding 尝试添加

.SetFetchMode("GameCharacterEquipments", FetchMode.Join)

or 要么

.SetFetchMode("GameCharacterEquipments", FetchMode.Eager)

between the various calls (after the CreateAlias ) 在各个调用之间(在CreateAlias

You probably have a lazy relationship defined on the GameCharacterEquipments . 您可能在GameCharacterEquipments上定义了惰性关系。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM