Как запросить динамические свойства в NHibernate? - PullRequest
3 голосов
/ 05 апреля 2011

У меня есть эта проблема.У меня есть такой класс:

public class WfStep
{
    private readonly IDictionary properties = new Hashtable();

    public virtual Guid Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual dynamic Properties { get { return new HashtableDynamicObject(properties); } }

и его файл сопоставления, например:

<class name="ConsoleApplication4.WfStep" table="WFSteps">

<id name="Id">
  <generator class="guid"/>
</id>
<property name="Name" />

<map name="Properties" table="WFSteps_Properties" access="field.lowercase">
  <key column="StepId" />
  <index column="PropertyName" type="System.String"/>
  <composite-element class="ConsoleApplication4.ValueItem, ConsoleApplication4">
    <property name="Value" type="System.String"/>
    <property name="ValueType" type="System.String"/>
  </composite-element>
</map>   

Этот пример перенесен из: Ayende Support dynamicполя с NHibernate и .NET 4.0

Затем я сохраняю объект в БД следующим образом: т.е.до 2010 года, т. е .:

var Session.Query<WfStep>().Where(x=>x.Properties.DateProperty.Year == 2010);

Выдает ошибку:

Дерево выражений может не содержать динамическую операцию

Как можнозапросить этот тип класса, который имеет динамические свойства.

1 Ответ

0 голосов
/ 20 мая 2011

Вы можете индексировать коллекции, отображенные в виде карты или списка.Попробуйте следующее hql

from WfStep s
where s.Properties["DateProperty"] = "2010"
...