NHibernate фильтруют набор

Вы могли попробовать Redmine. Это предоставляет Вам repo доступ, средства отслеживания, форумы, Wiki, календарь - в одном месте.

5
задан Jaguar 16 September 2010 в 10:31
поделиться

2 ответа

, если вы хотите отфильтровать коллекцию по запросу, можно использовать фильтр. Вам нужно будет объявить фильтр как в классе Version, так и в элементе сумки и применить фильтр из метода NHibernateSession.EnableFilter

, если вы всегда хотите получить одну версию в сумке, а затем реализовать 'where' в отображение пакета:

<bag name="Versions" cascade="all-delete-orphan" inverse="true" lazy="false" where="CurrentVersionNumber = Versions.VersionNumber" >
    <key column="DataObjectId" />
    <one-to-many class="DataObjectVersion" />
</bag>

обратите внимание, что в 'where' вы пишете правильный SQL, а не HQL, и поэтому правильный SQL, который я пишу выше, вероятно, должен быть изменен, чтобы отразить вашу схему

Кроме того, если один объект должен быть получил настройку сумки, и соответствующий IList может быть излишним. Применение свойства формулы и объекта DataObjectVersion в классе может быть более подходящим

в классе DataObject замените IList на

public virtual DataObjectVersion Version { get; set; }

, а в отображении замените «мешок» чем-то в строках

<property name="Version" type="DataObjectVersion" update="false" insert="false" formula="(select v.DataObjectVersionId, v.Comments, v.VersionNumber, v.DataObjectId from DataObjectVersion v where v.VersionNumber  = CurrentVersionNumber)" />

, снова только правильно SQL разрешен

Я использовал вычисляемые свойства с собственными типами данных (datetime, string и т. Д.), И для выборки Entity может (а может и не потребоваться) что-то еще или другое. коллекция после вы получили первичный объект DataObject, создав фильтр для коллекции

IList<DataObjectVersion>  fVersion = 
    NHibernateSession.CreateFilter(do.Versions, "where VersionNumber = :ver")
        .SetParameter("ver", do.CurrentVersionNumber)
        .List<DataObjectVersion>();

, где коллекция do.Versions не инициализируется, а только результаты, полученные в отдельной коллекции fVersion, и это второй ВЫБЕРИТЕ после того, как уже совершили круговой обход базы данных для выборки DataObject.

11
ответ дан 13 December 2019 в 19:30
поделиться

Presumably your VersionNumber increments as the user changes the data and you're trying to get the latest one. If you consider the VersionNumber as an "Age" field instead (i.e. where 0 is the latest / youngest version, 1 is the next oldest and so on) then your problems becomes how to get all the entities with an Age of 0. This can be done using a filter: http://nhibernate.info/doc/nh/en/index.html#objectstate-filters

0
ответ дан 13 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: