Отображение коллекции сущностей в беглом nHibernate - PullRequest
0 голосов
/ 29 июля 2010

Я разрабатываю приложение на основе вопросов / ответов

У меня есть таблица Post в БД по строкам:

  • ID
  • Заголовок
  • Кузов
  • Дата создания
  • AuthorID
  • AuthorName (если пользователь не зарегистрирован)
  • AutherEmail (как указано выше)
  • PostType (enum - 1, если вопрос, 2, если ответ)
  • Показать (битовое поле)

Затем существует "PostBase" - абстрактный класс (свойства, общие для вопросов и ответов - перечислены ниже). Затем у меня есть внутренний класс «Post», который происходит от PostBase и, следовательно, имеет все свойства, перечисленные выше.

Затем есть класс Вопроса и класс Ответа.

Оба используют 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; }
}

Который в основном имеет "Вопрос" - помните, что это просто сообщение в БД, с ParentPostID 0, со списком Ответов (где ParentPostID равен Question.ID ... или вдоль этих строк)

Мой вопрос - как мне отобразить это в беглом nHibernate?

1 Ответ

1 голос
/ 30 июля 2010

Вы можете использовать Automapper для QuestionWithAnswers, но у Ответов должен быть 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; }
}

Если на вопрос есть ответы, вы получите их, а если нет, вы не получите.

...