У меня есть следующий класс:
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 равно нулю.Почему он не заселяется?