我有以下课程:
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
以下映射文件:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="MyNamespace"
namespace="MyNamespace">
<class name="MyNamespace.MyClass" table="MY_TABLE">
<id name="MyID" column="MY_ID" type="System.String">
<generator class="assigned"></generator>
</id>
<property name="MyData" column="MY_DATA"></property>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
当我尝试运行以下行时:
session.Delete("From MyClass m");
Run Code Online (Sandbox Code Playgroud)
我收到一个QuerySyntaxException,消息"MyClass未映射[来自MyClass s]".
当我在映射文件中将"MyID"字段的名称更改为"ID"时,异常变为
NHibernate.PropertyNotFoundException:在类'MyNamespace.MyClass'中找不到属性'ID'的getter.
所以我假设它可以找到映射文件.我确保映射文件是一个嵌入式资源,检查并dobule检查映射文件中的命名空间和类名.什么可能导致错误?我认为它可能与未映射的MyList属性有关但我不确定,因为我在其他类上使用非映射属性没有问题.
编辑:我试图覆盖这个类,一个没有"MyData"属性的类,并重新定义"MyList"属性为字符串.对于我的重写类,我仍然收到相同的错误.
编辑2:尝试使用一个非常简单的类,具有相同的返回类型的属性名称,只有简单的get; 组; 块.我仍然得到同样的错误.我几乎可以肯定nhibernate可以看到我的映射文件,因为如果我更改单个属性的名称,它会给我PropertyNotFound而不是"class in not mapped".
在映射的情况下
<class name="MyClass" table="MY_TABLE">
Run Code Online (Sandbox Code Playgroud)
你应该使用,例如:
session.CreateQuery("from MyClass")
Run Code Online (Sandbox Code Playgroud)
但不是:
session.CreateQuery("from MY_TABLE")
Run Code Online (Sandbox Code Playgroud)
如果你使用的话怎么样
session.Delete("From MyNamespace.MyClass m");
Run Code Online (Sandbox Code Playgroud)
我只是看着HQL引用,并在他们的cat示例中注意到它们使用完全限定的对象,即Eg.Cat.
归档时间: |
|
查看次数: |
14006 次 |
最近记录: |