是否有可能nhibernate将查询作为IDictionary而不是实体类返回?

wus*_*her 8 nhibernate fluent-nhibernate

我有一个实体人:

public class Person
{
   public virtual int Id {get; set; }
   public virtual string FirstName { get; set; }
   public virtual string MiddleName { get; set; }
   public virtual string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

与映射:

public class PersonMap
{
   public PersonMap()
   {
       Table(TABLE_NAME); 
       Id( x => x.Id);
       Map(x => x.FirstName).Not.Nullable();
       Map(x => x.LastName).Not.Nullable();
       Map(x => x.MiddleName).Not.Nullable();
    }
}
Run Code Online (Sandbox Code Playgroud)

有些stuations我希望Nhibernate返回字典而不是实体:

IDictionary<string,string> person = session.Get(id);//????
string firstName = person["FirstName"];
Run Code Online (Sandbox Code Playgroud)

如果不添加不同的映射,这可能吗?

Dan*_*anP 12

您需要定义自己的ResultTransformer实现,以使其按您需要的方式工作.以下是您可以根据需要进行调整的参考实现.完全没有错误检查等; 所以谨慎使用;)

using System;
using System.Collections;
using NHibernate;
using NHibernate.Properties;
using NHibernate.Transform;


[Serializable]
public class DictionaryResultTransformer : IResultTransformer
{

        public DictionaryResultTransformer()
        {

        }

        #region IResultTransformer Members

        public IList TransformList(IList collection)
        {
                return collection;
        }

        public object TransformTuple(object[] tuple, string[] aliases)
        {
          var result = new Dictionary<string,object>();
          for (int i = 0; i < aliases.Length; i++)
          {
            result[aliases[i]] = tuple[i];                         
          }
          return result;
        }

        #endregion
}
Run Code Online (Sandbox Code Playgroud)