NHibernate QueryOver 无法解析 属性
NHibernate QueryOver Could not resolve property
我正在尝试 QueryOver 和 select 一个 属性 其中 returns 一个私有 属性。我不能很好地解释它,但是例子会告诉你。
映射:
<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>
Class:
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>();
当我尝试这个查询时,我得到 'Could not resolve property'。没有投影的查询工作正常。
知道我做错了什么吗??
NHibernate 无法解析未映射的、运行时计算的 属性,例如 Image
,因此它无法投影它。您只能在投影中使用映射属性。
为了实现您的计划,您必须加入您的 Image
table,并且仅 Take(1)
。有关示例,请参阅 this。
我正在尝试 QueryOver 和 select 一个 属性 其中 returns 一个私有 属性。我不能很好地解释它,但是例子会告诉你。
映射:
<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>
Class:
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>();
当我尝试这个查询时,我得到 'Could not resolve property'。没有投影的查询工作正常。
知道我做错了什么吗??
NHibernate 无法解析未映射的、运行时计算的 属性,例如 Image
,因此它无法投影它。您只能在投影中使用映射属性。
为了实现您的计划,您必须加入您的 Image
table,并且仅 Take(1)
。有关示例,请参阅 this。