Nhibernate:QuerySyntaxException:&x27;类别';未映射

Nhibernate:QuerySyntaxException:&x27;类别';未映射,nhibernate,Nhibernate,我有以下课程: public class MyClass { private List<long> _myList = new List<long>(); public virtual string MyID { get; set; } public virtual string MyData { get { return SomeStaticClass.Serialize(_my

我有以下课程:

public class MyClass
{
    private List<long> _myList = new List<long>();

    public virtual string MyID { get; set; }

    public virtual string MyData
    {
        get
        {
            return SomeStaticClass.Serialize(_myList);
        }
        set
        {
            _myList = SomeStaticClass.Deserialize<List<long>>(value);
        }
    }

    public virtual List<long> MyList
    {
        get { return _myList; }
    }
}
我得到一个QuerySyntaxException,消息为“MyClass未映射[来自MyClass s]”

当我在映射文件中将“MyID”字段的名称更改为“ID”时,异常变为

NHibernate.PropertyNotFoundException:在类“MyNamespace.MyClass”中找不到属性“ID”的getter

所以我假设它可以找到映射文件。我确保映射文件是一个嵌入式资源,并检查了映射文件中的名称空间和类名。什么可能导致错误?我认为这可能与MyList属性有关,它没有映射,但我不确定,因为我在其他类上使用未映射属性没有问题

编辑:我尝试用一个没有“MyData”属性的类重写这个类,并将“MyList”属性重新定义为字符串。我仍然收到被重写类的相同错误


编辑2:尝试使用一个非常简单的类,该类具有相同的属性名和相同的返回类型,并且仅使用简单的get;设置阻碍。我仍然会犯同样的错误。我几乎可以肯定nhibernate可以看到我的映射文件,因为如果我更改单个属性的名称,它将为我提供PropertyNotFound而不是“未映射中的类”。

在映射文件中指定两次命名空间似乎有点奇怪。我会尝试只将name属性指定为“MyClass”,而不是“MyNamespace.MyClass”,因此

<class name="MyClass" table="MY_TABLE">

如何加载hbms?如果它们是资源,请确保您已将文件实际设置为Visual Studio中的嵌入式资源

如果您使用

session.Delete("From MyNamespace.MyClass m");

我只是看了一下引用,注意到在他们的cat示例中,他们使用完全限定的对象,例如cat

我有这个问题。我忘了将hbm放在映射XML文件的名称中。

确保“文件的构建操作”是“嵌入式资源”。

在映射的情况下

<class name="MyClass" table="MY_TABLE">
但不是:

session.CreateQuery("from MY_TABLE")

您应该将相关的*.hbm.xml设置为嵌入式资源


我也有类似的问题。基本上,我在解决方案中加入了一个新项目,但我没有在hibernate.cfg.xml文件中映射名称空间。

我不知道你的或我的名称空间是否更好,但我总是这样映射,直到今天我都没有遇到任何问题。也尝试了您的建议,但问题仍然存在。可能没有太大帮助,但您是否验证了您的属性名称与映射文件中的名称相同?请注意,属性名称区分大小写。谢谢,我对所有属性都检查了十几次,之后我再次复制粘贴它们并再次检查了十几次。当我收到与此类似的错误时,我发现这就是原因。我写了很多关于NHibernate的文章。我希望这篇文章能解决这个问题,其他文章也能有所帮助。@SerhatÖzgel你能解决这个问题吗?我有一个类似的问题。我确信他们被正确地设置为嵌入式资源,我在问题中已经提到了。这也解决了一个类似的问题。当我在hbm.xml类上将auto import设置为false时,我必须在delete函数中显式指定名称空间。nh4.0具有相同的行为。我必须传递目标类的全名,即使该类名在整个解决方案中是唯一的。
<class name="MyClass" table="MY_TABLE">
session.CreateQuery("from MyClass")
session.CreateQuery("from MY_TABLE")