NHibernate:无法解析继承的id属性

NHibernate:无法解析继承的id属性,nhibernate,mapping-by-code,Nhibernate,Mapping By Code,我的实体定义如下: public class Foo : Entity<Foo.FooId> { public class FooId { public virtual String Bar { get; protected internal set; } public virtual Int32 Buzz { get; protected internal set; } } // ... } 公共类Foo:Enti

我的实体定义如下:

public class Foo : Entity<Foo.FooId>
{
    public class FooId
    {
        public virtual String Bar { get; protected internal set; }
        public virtual Int32 Buzz { get; protected internal set; }
    }

    // ...
}
公共类Foo:Entity
{
公共类食物ID
{
公共虚拟字符串栏{get;受保护的内部集;}
公共虚拟Int32 Buzz{get;受保护的内部集;}
}
// ...
}
下面是基类:

public abstract class Entity<T> : IEquatable<Entity<T>>
{
    public virtual T Id { get; protected internal set; }

    // ...
}
公共抽象类实体:IEquatable
{
公共虚拟T Id{get;受保护的内部集;}
// ...
}
我将把“Id”属性映射为“复合键”,因此我添加了以下映射类:

public class FooMap : ClassMapping<Foo>
{
    public FooMap()
    {
        ComponentAsId(x => x.Id, m =>
        {
            m.Property(p => p.Bar);
            m.Property(p => p.Buzz);
        });
    }
}
公共类FooMap:ClassMapping
{
公共地图()
{
ComponentAsId(x=>x.Id,m=>
{
m、 属性(p=>p.Bar);
m、 属性(p=>p.Buzz);
});
}
}
这很好,但我在以下查询尝试中遇到了一个错误:

session.QueryOver<Foo>()
       .Where(m => m.Id.Bar == "a" &&
                   m.Id.Buzz == 2).List();
session.QueryOver()
.其中(m=>m.Id.Bar==“a”&&
m、 Id.Buzz==2.List();
我得到的错误是: NHibernate.QueryException:无法解析属性Id:Foo

这很奇怪,因为通过删除基类并将所有内容封装在“Foo”中,它就像一个符咒。
提前感谢。

这是一个bug,报告为。它现在已在最新的中修复,并将作为3.3.3.GA发布。

您是否尝试将id设置程序公开而不是内部保护?@Stefan Yep,它并不能解决我的问题。我刚刚遇到了相同的问题。能解决它吗?