代码之家  ›  专栏  ›  技术社区  ›  cbp

NHibernate:使用IResultTransformer设置引用

  •  1
  • cbp  · 技术社区  · 16 年前

    我有一个实现IResultTransformer的自定义类。

    对于单个值来说,这样做很容易,但是如果元组中只有id,那么设置引用的正确方法是什么呢?如果他们被认为是懒惰的呢?我应该使用Get或load方法从会话中加载它们吗?

    例如:

    public class FoobarResultTransformer : IResultTransformer
    {
        public object TransformTuple(object[] tuple, string[] aliases)
        {
            var foobar = new Foobar();
    
            for (int i = 0; i < aliases.Length; i++)
            {
                switch(aliases[i])
                {
                    case "IntProperty":
                        // This one is easy
                        foobar.IntProperty = Convert.ToInt32(tuple[i]);
                        break;
                    case "ReferencedEntityId":
                        // Assuming the tuple contains a GUID identifier, what should I do here?
                        foobar.ReferencedEntity =
                        break;
                }
            }
    
            return foobar;
        }
    }
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   Lachlan Roche    16 年前

    应该使用主键加载引用的实体 Get 或 Load .如果它们应该是延迟加载的,请使用 负载 .

    如果对象不存在,Get将返回null。这通常会导致对数据库进行选择,但它会首先检查会话缓存和二级缓存。

    Load永远不会返回null。它将返回一个代理。