【发布时间】:2011-05-31 15:27:28
【问题描述】:
我开始学习 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”中的元素“列表”在命名空间“urn:nhibernate-mapping-2.2”中具有无效的子元素“一对多”。预期的可能元素列表:命名空间 '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>
我猜这本书是错的?
【问题讨论】:
-
从错误消息中,可以很容易地假设
one-to-many永远不会是list的孩子。我会在错误消息中称其为错误。
标签: nhibernate nhibernate-mapping