1

私はQueryOverを試みてプライベートプロパティを返すプロパティを選択しようとしています。私はそれをうまく説明することはできませんが、例があなたに伝えます。NHibernate QueryOverプロパティを解決できませんでした

マッピング:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="IWA.Model" assembly="IWA.Model"> 
<class name="Test" lazy="false" table="Test"> 

<id name="Id" column="Id" > 
    <generator class="identity" /> 
</id> 

<bag name="_images" access="field" table="Image" cascade="none"> 
    <key column="IdTest" /> 
    <one-to-many class="Image" /> 
</bag> 

</class> 
</hibernate-mapping> 

クラス:

public class Test : IEntity<int> 
{ 
    private readonly IList<Image> _images; 

    public Test() 
    { 
     _images = new List<Image>(); 
    } 

    public int Id { get; set; } 


    public Image Image => _images.FirstOrDefault(); 
} 

QueryOver:

TestDto r = null; 
Session.QueryOver<Test>() 
      .Where(x => x.Id == _id) 
      .Select(
       Projections.Property<Test>(x => x.Id).WithAlias(() => r.Id), 
       Projections.Property<Test>(x => x.Image).WithAlias(() => r.Image) 
      )    .TransformUsing(Transformers.AliasToBean<TestDto>()) 
      .SingleOrDefault<TestDto>(); 

私はこのクエリをしようとすると、私が得る「コuldはプロパティを解決しません '。予測なしのクエリは正常に機能します。

私が何を間違えているのか何か考えていますか?

+0

'Projections.SqlProjection'を試しましたか? – Najera

+0

@Najeraいいえ、私はこれまで聞いたことがありません。 –

答えて

2

NHibernateは、Imageのようなマップされていない実行時計算プロパティを解決できないため、プロジェクトを投影できません。投影ではマップされたプロパティのみを使用できます。

あなたの予測を達成するには、Imageテーブルに参加し、Take(1)に参加する必要があります。例については、thisを参照してください。

関連する問題