NHibernate - AddEntity и проблема AddJoin

Если Вы хотите связать с другим свойством на объекте:

{Binding Path=PathToProperty, RelativeSource={RelativeSource Self}}

, Если Вы хотите получить свойство на предке:

{Binding Path=PathToProperty,
    RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

, Если Вы хотите получить свойство на шаблонном родителе (таким образом, можно сделать 2 пути привязка в ControlTemplate)

{Binding Path=PathToProperty, RelativeSource={RelativeSource TemplatedParent}}

или, короче (это только работает на привязку OneWay):

{TemplateBinding Path=PathToProperty}
6
задан Mark Sherretta 15 July 2009 в 15:17
поделиться

4 ответа

Прошло некоторое время, но я думаю, вам не хватает этого:

.SetResultTransformer(new DistinctEntityRootTransformer())
1
ответ дан 10 December 2019 в 00:42
поделиться

Что произойдет, если вы опустите AddJoin? Разве недостаточно просто указать AddEntity?

0
ответ дан 10 December 2019 в 00:42
поделиться

Если ваше отображение правильное, вы можете просто использовать объединенную выборку, чтобы получить все это за одно обращение, например:

var x = session.CreateQuery("from Item i join fetch i.User").List<Item>();
0
ответ дан 10 December 2019 в 00:42
поделиться

Я просто потратил день, чтобы понять это. SetResultTransformer (CriteriaUtil.DistinctRootEntity) работает с последним добавленным элементом.

Вот что я сделал, чтобы получить первую сущность из запроса. Однако есть одна загвоздка: мне пришлось изменить NHibernate.DistinctRootEntityResultTransformer.TransformTuple (), чтобы он был виртуальным. Для нас это не имеет большого значения, потому что мы уже разветвили NHibernate для таких тривиальных дополнений, как это. Если вы не хотите разветвлять NH, было бы легко запустить собственный IResultTransformer, убедившись, что элементы уникальны.

добавьте это в свой запрос:

query.SetResultTransformer(new FirstTupleDistinctResultTransformer());

, и это новый класс:

public class FirstTupleDistinctResultTransformer : DistinctRootEntityResultTransformer
{
    public override object TransformTuple(object[] tuple, string[] aliases)
    {
        return tuple[0];
    }
} 
5
ответ дан 10 December 2019 в 00:42
поделиться
Другие вопросы по тегам:

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