使用流畅的nHibernate映射实体集合

时间:2010-07-29 18:23:55

标签: nhibernate fluent-nhibernate nhibernate-mapping

我正在开发一个基于问题/答案的应用程序

我在db中有一个Post表:

  • ID
  • 标题
  • 身体
  • DateCreated
  • 的AuthorID
  • AuthorName(如果用户未注册)
  • AutherEmail(如上所述)
  • PostType(枚举 - 如果有问题,则为1,如果回复则为2)
  • 显示(位字段)

然后,有“PostBase” - 这是一个抽象类(它具有问题和答案共有的属性 - 在下面列出) 然后我有一个内部的“Post”类,它来自PostBase,因此具有上面列出的所有属性。

然后有一个Question类和一个Answer类。

两者都使用Post作为基类。

以下是课程:

public abstract class PostBase
{
    {
        get { return postCreatorEmail; }
        //todo: add email address validation here?
        set { postCreatorEmail = value; }
    }        private IList<Attachment> attachments = new List<Attachment>();

    public PostBase()
    {
       //init logic here
    }

    public virtual DateTime DateCreated { get; set; }

    public virtual string ID { get; set; }

    public virtual string Body { get; set; }

    public virtual DateTime DateLastModified { get; set; }

    public virtual string PostCreatorName { get; set; }

    public virtual string PostCreatorEmail { get; set; }

    public virtual int PostCreatorID { get; set; }

    public virtual PostType PostType { get; set; }

    public virtual PostSource PostSource { get; set; }

    public virtual bool Show { get; set; }

    public IEnumerable<Attachment> Attachments { get { return attachments; } }
}

发布

internal class Post : PostBase
{
    public virtual List<string> Tags { get; set; }

    public virtual string Title { get; set; }

    public virtual string ParentPostID { get; set; }
}

问题:

public class Question : PostBase
{
    public Question()
    {
        tags = new List<string>();
    }

    public string Title { get; set; }
    public List<string> Tags { get { return tags; } }

    public int NumberOfReplies { get; set; }
}

答案:

public class Answer : PostBase
{
    public string QuestionID { get; set; }
}

我使用automapper来映射到/从答案和帖子或问题和帖子

我正在尝试做的是创建以下类:

public class QuestionWithAnswers
{
    public Question Question { get; set; }
    public IEnumerable<Answer> Answers { get; set; }
}

其中基本上有一个“问题” - 记住这只是db中的一个Post,ParentPostID为0,带有Answers列表(其中ParentPostID等于Question.ID ......或沿着这些行)< / p>

我的问题是 - 如何在流利的nHibernate中映射它?

1 个答案:

答案 0 :(得分:1)

你可以使用Automapper for QuestionWithAnswers,但是Answers必须有一个IList而不是IEnumerable:

public class QuestionWithAnswers
{
    public virtual Question Question { get; set; }
    public virtual IList<Answer> Answers { get; set; }
}

我不明白是否存在QuestionWithAnswers,当以下(我认为)应该这样做时:

public class Question : PostBase
{
    public virtual string Title { get; set; }
    public virtual List<string> Tags { get { return tags; } }
    public virtual int NumberOfReplies { get; set; }
    public virtual IList<Answer> Answers { get; set; }
}

如果问题有答案,你会得到它们,如果没有,你就不会。