我开始学习NHibernate(3.0)并获得Packt Publishing的NHibernate 3.0 Cookbook副本。
有一个关于一对多映射的部分,我正在使用我自己的数据库。它建议我应该做这样的事情来模拟客户和他们的域之间的一对多关系:
public class Customer
{
public virtual int Id { get; protected set; }
public virtual string CustomerName { get; set; }
// Customer has many domains
public virtual IList<Domain> Domains { get; set; }
}
public class Domain
{
public virtual int Id { get; protected set; }
public virtual int CustomerID { get; set; }
public virtual string DomainName { get; set; }
}
客户映射:
<class name="Customer" table="tblCustomer">
<id name="Id">
<column name="CustomerID" sql-type="int" not-null="true"/>
<generator class="identity"/>
</id>
<property name="CustomerName" column="Customer"/>
<list name="Domains">
<key column="CustomerID"/>
<one-to-many class="Domain" />
</list>
</class>
当我运行时,我收到以下错误:
XML验证错误:命名空间'urn:nhibernate-mapping-2.2'中的元素'list'在命名空间'urn:nhibernate-mapping-2.2'中具有无效的子元素'one-to-many'。期望的可能元素列表:名称空间'urn:nhibernate-mapping-2.2'中的'index,list-index'。
本书的示例有点复杂,因为它们使用每子类表映射:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Eg.Core"
namespace="Eg.Core">
<subclass name="Movie" extends="Product">
<property name="Director" />
<list name="Actors" cascade="all-delete-orphan">
<key column="MovieId" />
<index column="ActorIndex" />
<one-to-many class="ActorRole"/> <-- Is this wrong?
</list>
</subclass>
</hibernate-mapping>
我猜这本书错了吗?
答案 0 :(得分:4)
不,您的映射缺少index
元素。如果你想要一个无序的集合使用包映射,NHibernate中的列表是一个有序集。