Если Вы хотите связать с другим свойством на объекте:
{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}
Прошло некоторое время, но я думаю, вам не хватает этого:
.SetResultTransformer(new DistinctEntityRootTransformer())
Что произойдет, если вы опустите AddJoin? Разве недостаточно просто указать AddEntity?
Если ваше отображение правильное, вы можете просто использовать объединенную выборку, чтобы получить все это за одно обращение, например:
var x = session.CreateQuery("from Item i join fetch i.User").List<Item>();
Я просто потратил день, чтобы понять это. 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];
}
}