我有这个:
namespace Demo.Framework.Domain
{
public class UserEntity
{
public virtual Guid UserId { get; protected set; }
}
}
namespace TDemo.Framework.Domain
{
public class Users : UserEntity
{
public virtual string OpenIdIdentifier { get; set; }
public virtual string Email { get; set; }
public virtual IList<Movie> Movies { get; set; }
}
}
namespace Demo.Framework.Domain
{
public class Movie
{
public virtual int MovieId { get; set; }
public virtual Guid UserId { get; set; } // not sure if I should inherit UserEntity
public virtual string Title { get; set; }
public virtual DateTime ReleaseDate { get; set; } // in my ms sql 2008 database I want this to be just a Date type. Not sure how to do that.
public virtual int Upc { get; set; }
}
}
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Demo.Framework"
namespace="Demo.Framework.Domain">
<class name="Users">
<id name="UserId">
<generator class="guid.comb" />
</id>
<property name="OpenIdIdentifier" not-null="true" />
<property name="Email" not-null="true" />
</class>
<subclass name="Movie">
<list name="Movies" cascade="all-delete-orphan">
<key column="MovieId" />
<index column="MovieIndex" /> // not sure what index column is really.
<one-to-many class="Movie"/>
</list>
</subclass>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Demo.Framework"
namespace="Demo.Framework.Domain">
<class name="Movie">
<id name="MovieId">
<generator class="native" />
</id>
<property name="Title" not-null="true" />
<property name="ReleaseDate" not-null="true" type="Date" />
<property name="Upc" not-null="true" />
<property name="UserId" not-null="true" type="Guid"/>
</class>
</hibernate-mapping>
我收到此错误:
'extends' attribute is not found or is empty.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: NHibernate.MappingException: 'extends' attribute is not found or is empty.
Source Error:
Line 19: var nhConfig = new Configuration().Configure();
Line 20: var sessionFactory = nhConfig.BuildSessionFactory();
答案 0 :(得分:2)
NHibernate的根源在于java,其中子类“扩展”了一个基类,当在不同的hbm文件中定义层次时,这有时是一个有用的映射元素。
您看到错误的原因是您将用户的电影映射为“子类”的方式。这让NHib感到困惑,因为你没有扩展任何东西。删除列表周围的“子类”节点,该错误将消失。
顺便说一句,Jamie对于为什么需要列表索引是正确的。列表映射很好,但除非有令人信服的理由不这样做,否则我通常需要为我的一对多关系设置语义,这看起来像下面的例子中的hbm。
HTH,
Berryl
<set access="field.camelcase-underscore" cascade="none" inverse="true" name="Employees">
<key foreign-key="Employee_Department_FK">
<column name="DepartmentId" />
</key>
<one-to-many class="Employee" />
</set>