nhibernate - 无法解析属性 : Id

标签 nhibernate fluent-nhibernate

我收到以下错误消息:

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 对象,所以我知道它与它有关,但我不确定到底是什么。我可以成功创建一个绑定(bind)到 Location 但无法查询它的 User 对象。使用 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);
        }
    }

最佳答案

原来这是我错误地使用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)

关于nhibernate - 无法解析属性 : Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10639548/

相关文章:

.net - NHibernate 在保存时自动设置属性

NHibernate Image Storage - byte[] 值的长度超过了配置的长度

fluent-nhibernate - NHibernate、遗留数据库、非外键

c# - Fluent NHibernate 将多行分组到集合属性

c# - 无法加载文件或程序集

nhibernate - 在 NHibernate 中,如何找到知道其类型的持久性 POCO 类的 id 属性的名称?

linq - 如何使用 LINQ 使用 (.Any()) 过滤子集合的属性

nhibernate - 为什么我在构建 NHibernate session 工厂时会得到 "read-only cache configured for mutable"?

c# - 为什么SQL查询中没有WHERE子句?

nhibernate - 流畅的休眠 : Trying to create entity with composite key that is also the keys for two references