【问题标题】:NHibernate QueryOver Could not resolve propertyNHibernate QueryOver 无法解析属性
【发布时间】:2017-04-05 09:37:32
【问题描述】:

我正在尝试 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();
}

查询结束:

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>();

当我尝试此查询时,我得到“无法解析属性”。不带预测的查询工作正常。

知道我做错了什么吗??

【问题讨论】:

  • 你试过Projections.SqlProjection吗?
  • @Najera 不,我以前从未听说过。

标签: asp.net-mvc nhibernate nhibernate-mapping queryover


【解决方案1】:

NHibernate 无法解析未映射的运行时计算属性,例如 Image,因此它无法投影它。您只能在投影中使用映射属性。

为了实现您的投影,您必须加入您的Image 表,并且只能加入Take(1)。示例见this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多