当我尝试在我的MVC应用程序中保存我的饮料对象时,我遇到了NHibernate和映射文件的问题。我的映射文件是一个嵌入式资源,我的hibernate.cfg.xml总是复制。
这是我的class.cs:
namespace FrancosPoS.DBMapping {
public class drink {
public drink() { }
public virtual int id { get; set; }
public virtual string type { get; set; }
public virtual string price { get; set; }
}
}
我的XML映射:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="FrancosPoS.DBMapping" namespace="FrancosPoS.DBMapping" xmlns="urn:nhibernate-mapping-2.2">
<class name="drink" table="drink" lazy="true" >
<id name="id">
<generator class="identity" />
<column name="id" sql-type="int(11)" not-null="true" />
</id>
<property name="type">
<column name="type" sql-type="varchar(25)" not-null="true" />
</property>
<property name="price">
<column name="price" sql-type="varchar(8)" not-null="true" />
</property>
</class>
</hibernate-mapping>
顺便说一句,如果我不尝试将数据保存在数据库中,则连接会打开并关闭。
这是我的解决方案资源管理器:
这就是让我疯狂的错误:
"Error: NHibernate.MappingException: FrancosPoS.DBMapping.drink.hbm.xml(6,8): XML validation error: The element 'id' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 'column' in namespace 'urn:nhibernate-mapping-2.2'. ---> System.Xml.Schema.XmlSchemaValidationException: The element 'id' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 'column' in namespace 'urn:nhibernate-mapping-2.2'.\r\n --- End of inner exception stack trace ---
答案 0 :(得分:2)
问题在于节点ID,它没有子节点,删除该节点,它将只是这样:
<id name="id">
<generator class="identity" />
</id>
列的名称在id节点中指定,并且您不必告诉列具有“not-null”约束,因为始终需要id列
此外,在xml映射的这一行:
<hibernate-mapping assembly="FrancosPoS.DBMapping" namespace="FrancosPoS.DBMapping" xmlns="urn:nhibernate-mapping-2.2">
“assembly”属性似乎是错误的,它应该是你的程序集的名称(我几乎可以肯定是“FrancosPos”)。