2
我有一个基类(消息)的程序,其中许多其他类从其衍生(特别是文章和评论)。我想创建一个标准来选择RootMessage属性是Article类型的所有注释(我有一些其他类型的潜在RootMessages)。但我似乎无法找到如何在条件中添加这种约束。NHibernate标准:为属性类型添加一个约束条件
现在我的代码是这样的:
public virtual ICollection<Comment> GetCommentsByArticle(ISession session)
{
var c = session.CreateCriteria(typeof(Comment))
.Add(Expression.Eq("Author", this))
.AddOrder(Order.Desc("CreationDate"))
.SetMaxResults(20);
var commentList = c.List<Comment>();
return commentList;
}
但当然这将返回该作者的每一个评论。我想要的是这个作者的每条评论都有一个ArticleMessage类型的RootMessage。
这些是映射。
消息:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="FolkeLib"
namespace="Folke.Code.Domain">
<class name="Message" discriminator-value="0">
<id name="Id">
<generator class="native"></generator>
</id>
<discriminator column="MessageType" type="Int32"/>
<timestamp column="ModificationDate" name="ModificationDate"/>
<property name="CreationDate" index="ArticleCreationDate"/>
<many-to-one name="Author"/>
<property name="Text" type="StringClob">
<column name="Text" sql-type="text"/>
</property>
<property name="Locked"/>
<many-to-one name="Locker" not-null="false"/>
<many-to-one name="RootMessage" not-null="false"/>
<many-to-one name="ParentMessage" not-null="false"/>
<property name="Score"/>
<many-to-one name="Site" not-null="true"/>
文章:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="FolkeLib"
namespace="Folke.Code.Domain">
<subclass name="Article" extends="Message" discriminator-value="1">
<property name="Title"/>
<set name="TagSet" lazy="true" table="MessageTag">
<key column="MessageId"/>
<many-to-many class="Tag" column="TagId"/>
</set>
<set name="ImageSet" lazy="true" table="MessageImage">
<key column="MessageId"/>
<many-to-many class="Image" column="ImageId"/>
</set>
<many-to-one name="Forum"/>
</subclass>
</hibernate-mapping>
评论(类是几乎空了):
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="FolkeLib"
namespace="Folke.Code.Domain">
<subclass name="Comment" extends="Message" discriminator-value="2">
</subclass>
</hibernate-mapping>
任何帮助apprecia泰德!
我按照要求将映射添加到OP。 – Astaar 2010-08-06 13:01:15
NHibernate会抛出此错误消息: 无法解析属性:RootMessage.class:Folke.Code.Domain.Comment 它正在查找Comment的属性,名称为“RootMessage.class”,而不是评论的类.RootMessage属性。 – Astaar 2010-08-06 13:03:42
@Whistle:我认为你可能需要创建一个别名来正确地做到这一点,我已经更新了我的答案,包括这一点。 – DanP 2010-08-06 13:15:36