我收到以下错误消息:
NHibernate.HibernateException: NHibernate.HibernateException: Unable to resolve property: Id.
从以下代码行抛出此错误:
User userFound = session.QueryOver<User>()
.Where(x => x.Id == testObjects.TestUser.Id)
.SingleOrDefault();
我的缩写映射如下:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("USER_HEADER");
Id(x => x.Id, "USER_ID")
.GeneratedBy.Foreign("UserLocation");
HasOne(x => x.UserLocation)
.PropertyRef(x => x.Id)
.Cascade.All();
}
}
public class LocationMap : ClassMap<Location>
{
public LocationMap()
{
Table("LOC_HEADER");
Id(x => x.Id, "LOC_ID");
HasOne(x => x.User)
.PropertyRef(x => x.Id);
}
}
在我将此关系添加到Location
之前,我能够查询User对象,所以我知道它与它有关,但我不确定究竟是什么。我可以成功创建一个绑定到User
的{{1}}对象但无法查询它。使用Location
会产生与上述QueryOver语句相同的错误。
以下是我正在运行的整体单元测试失败:
ISession.Get
答案 0 :(得分:5)
事实证明这是由于我错误地使用PropertyRef
造成的。在我的实例中,我不需要使用它。生成错误是因为没有名为Id
的属性,但有一个名为Id
的ID。我通过将映射更改为:
HasOne(x => x.UserLocation)
.PropertyRef(x => x.Id)
.Cascade.All();
以强>
HasOne(x => x.UserLocation)
.Cascade.All();
和
HasOne(x => x.User)
.PropertyRef(x => x.Id);
以强>
HasOne(x => x.User)
答案 1 :(得分:2)
PropertyRef
映射到property-ref
是一项遗留功能,它旨在允许您在关联的主键上未建立关联时创建多对一关联。
我猜你要指定连接的属性,这就是你使用PropertyRef的原因..如果你在UserLocation的Id的映射中使用Nhibernates默认约定你不需要显式指定如果你明确给出了列名,那么你需要在这里做同样的事情,但是在这种情况下你需要指定完全相同的列名。
希望有所帮助..