Загрузчик карты не заполняет словарь из пользовательского запроса SQL в NHibernate - PullRequest
1 голос
/ 17 марта 2011

У меня есть следующий класс:

public class Product
    {
        public virtual int ID { get; set; }
        public virtual string Number { get; set; }
        public virtual string Description { get; set; }
        public virtual Part Part { get; set; }

        public virtual IDictionary<string, string> CustomFields { get; set; }
    }

И отображение:

<class name="Product" table="PRODUCT">
    <id name="ID" column="ID" type="Int32">
      <generator class="native" />
    </id>
    <property name="Number" column="NUM" not-null="true" type="String"  />
    <property name="Description" column="DESCRIPTION" not-null="false" type="String"  />
    <map name="CustomFields" lazy="true" generic="true">
      <key />
      <index column="Name" type="String" />
      <element column="Value" type="String" />

      <loader query-ref="queryCustomFields" />
    </map>  

  </class>

  <sql-query name="queryCustomFields" >

    <return-scalar column="Name" type="String" />
    <return-scalar column="Value" type="String" />

    SELECT ... Name, Value        
    ...
    where product.NUM = :Number    
  </sql-query>

если я выполню именованный запрос следующим образом:

IQuery query = session.GetNamedQuery("queryCustomFields");
                    IList<object> customFields = query.SetString("Number", p.Number).List<object>();

он вернет действительныйрезультат.

Но если я попытаюсь выполнить это:

Product p = session.CreateQuery("select p from Product p where p.Number = '9780060722166'").UniqueResult<Product>();
Console.WriteLine(p.CustomFields.Count);

, то произойдет сбой на p.CustomFields.Count из-за CustomFields равно нулю.Почему он не заселяется?

...