Nhibernate 无法解析属性:Id

Nhibernate 无法解析属性:Id,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我收到以下错误消息: NHibernate.HibernateException: NHibernate.HibernateException: Unable to resolve property: Id. 此错误是从以下代码行引发的: User userFound = session.QueryOver<User>() .Where(x => x.Id == testObjects.TestUser.Id)

我收到以下错误消息:

NHibernate.HibernateException: NHibernate.HibernateException: Unable to resolve property: Id.
此错误是从以下代码行引发的:

User userFound = session.QueryOver<User>()
                   .Where(x => x.Id == testObjects.TestUser.Id)
                   .SingleOrDefault();

原来这是由于我错误地使用了
PropertyRef
。在我的例子中,我不需要使用这个。生成错误是因为没有名为
Id
的属性,但有名为
Id
的Id。我通过将映射更改为以下内容更正了问题:

HasOne(x => x.UserLocation)
        .PropertyRef(x => x.Id)
        .Cascade.All();

HasOne(x => x.UserLocation)
        .Cascade.All();
HasOne(x => x.User)

HasOne(x => x.UserLocation)
        .Cascade.All();
HasOne(x => x.User)

PropertyRef
映射到
property ref
是一项传统功能,它允许您在关联主键上未完成关联时创建多对一关联

我猜您希望指定要进行连接的属性,这就是您使用PropertyRef的原因。。如果在UserLocation Id的映射中使用Nhibernates默认约定,则无需显式指定属性。。如果要显式指定列名,则需要在此处执行相同的操作,但在这种情况下,需要指定完全相同的列名


希望这能有所帮助。

在遇到这个问题后不久,我回答了下面我自己的问题。我认为我需要属性ref,因为表之间的主键是不同的名称(loc_id和user_id),但实际上是相同的id。这不是我所了解的
属性ref
功能的预期用途。我没有看到您对该问题的回答。。在我的例子中,我假设远程引用不是主键——基本上是一样的。谢谢你的发帖!是的,它也对我有用,我使用了Nhibernate映射生成器,它已经生成了映射作为属性引用,而不需要它,因为属性实际上就是ID。
HasOne(x => x.User)