无法解析属性:Id

Col*_*e W 3 nhibernate fluent-nhibernate

我收到以下错误消息:

NHibernate.HibernateException: NHibernate.HibernateException: Unable to resolve property: Id.
Run Code Online (Sandbox Code Playgroud)

从以下代码行抛出此错误:

User userFound = session.QueryOver<User>()
                   .Where(x => x.Id == testObjects.TestUser.Id)
                   .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

我的缩写映射如下:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在添加此关系之前,我能够查询User对象,Location因此我知道它与它有关,但我不确定究竟是什么.我可以成功创建一个User绑定到Location但无法查询的对象.使用ISession.Get产生与上述QueryOver语句相同的错误.

以下是我正在运行的整体单元测试失败:

    public void Can_Create_User()
    {
        using (NHibernate.ISession session = SessionFactory.GetCurrentSession())
        {
            using (NHibernate.ITransaction tran = session.BeginTransaction())
            {
                session.Save(testObjects.TestValidationDetail);
                session.Save(testObjects.TestUser);
                tran.Commit();
            }
        }

        using (NHibernate.ISession session = SessionFactory.GetCurrentSession())
        {
            User userFound = session.QueryOver<User>().Where(x => x.Id == testObjects.TestUser.Id).SingleOrDefault();

            Assert.IsNotNull(userFound);
            Assert.AreEqual(userFound.Id, userFound.UserLocation.Id);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Col*_*e W 5

事实证明这是由于我错误地使用造成的PropertyRef.在我的实例中,我不需要使用它.生成错误是因为没有命名属性Id但是有一个名为的ID Id.我通过将映射更改为:

HasOne(x => x.UserLocation)
        .PropertyRef(x => x.Id)
        .Cascade.All();
Run Code Online (Sandbox Code Playgroud)

HasOne(x => x.UserLocation)
        .Cascade.All();
Run Code Online (Sandbox Code Playgroud)

HasOne(x => x.User)
        .PropertyRef(x => x.Id);
Run Code Online (Sandbox Code Playgroud)

HasOne(x => x.User)
Run Code Online (Sandbox Code Playgroud)