C# NHibernate-TransformUsing.SingleOrDefault返回默认值

C# NHibernate-TransformUsing.SingleOrDefault返回默认值,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我对NHibernate有意见 我的映射: <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="StatsRow" table="StatsRow" lazy="true"> <id name="StatsRowId" column="StatsRow_Id" type="int"> <generator class="native" >


我对NHibernate有意见

我的映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="StatsRow" table="StatsRow" lazy="true">
    <id name="StatsRowId" column="StatsRow_Id" type="int">
      <generator class="native" >
        <param name="sequence">SEQ_StatsRow</param>
      </generator>
    </id>
    <property name="JobId" column="JobId" type="string" not-null="true" />
    <property name="CreationTime" column="CreationTime" type="DateTime" not-null="true" />
    <property name="WorkflowName" column="WorkflowName" type="string" not-null="true"/>
    <property name="JobState" column="JobState" type="string" not-null="true" />
    <property name="LastErrorCode" column="LastErrorCode" type="string" not-null="true" />
    <property name="LastErrorMessage" column="LastErrorMessage" type="string" not-null="false" />
  </class>
</hibernate-mapping>
我只想为给定jobId的一个结果检索几列(我没有显示所有列,太多了^^),因此我使用以下方法:

var statRow = session.QueryOver<StatsRow>()
.Where(row => row.JobId == jobId)
.Select(
Projections.Property<StatsRow>(row => row.JobId),
Projections.Property<StatsRow>(row => row.JobState),
Projections.Property<StatsRow>(row => row.LastErrorCode),
Projections.Property<StatsRow>(row => row.LastErrorMessage),
Projections.Property<StatsRow>(row => row.CreationTime),
Projections.Property<StatsRow>(row => row.WorkflowName))
.TransformUsing(Transformers.AliasToBean<StatsRow>())
.SingleOrDefault<StatsRow>();
var statRow=session.QueryOver()
.Where(row=>row.JobId==JobId)
.选择(
Projections.Property(row=>row.JobId),
Projections.Property(row=>row.JobState),
Projections.Property(row=>row.LastErrorCode),
Projections.Property(row=>row.LastErrorMessage),
Projections.Property(row=>row.CreationTime),
Projections.Property(row=>row.WorkflowName))
.TransformUsing(Transformers.AliasToBean())
.SingleOrDefault();
我检查了返回值是否正确,没有pb(生成的SQL查询也正确)。 但是,这个代码段返回一个带有默认值的statslow,我不知道为什么(我登录了属性设置器,NHibernate也使用了它。) 如果我使用.SingleOrDefault()而不是(TransformUsing和SingleOrDefault),那么这些值就是我想要的值。那么,地图上有铅吗


能帮点忙吗?(顺便说一句,如果我犯了一些错误,很抱歉,英语不是我的主要语言^^)

我们这里缺少的是
.WithAlias()
语句。所以,像这样的表达:

Projections
   .Property<StatsRow>(row => row.JobId)
   .WithAlias(() => r.JobId),

好的,谢谢,我稍后再测试。我见过Alias的用法,但我认为只有当您有2个实体时才需要它(1个实体A是实体B的属性,您需要映射实体A的属性)。因此,投影中指定的属性仅用于查询,而转换器需要别名。
Projections
   .Property<StatsRow>(row => row.JobId)
   .WithAlias(() => r.JobId),
StatsRow r = null;

var statRow = session.QueryOver<StatsRow>()
.Where(row => row.JobId == jobId)
.Select(
  Projections.Property<StatsRow>(row => row.JobId).WithAlias(() => r.JobId),
  Projections.Property<StatsRow>(row => row.JobState).WithAlias(() => r.JobState),
  ...
)
.Take(1)
.TransformUsing(Transformers.AliasToBean<StatsRow>())
.SingleOrDefault<StatsRow>();