2010-07-29 5 views
0

Je développe une application de questions/réponsesune collection d'entités couramment NHibernate

J'ai une table post dans la db le long des lignes de:

  • ID
  • Titre
  • corps
  • DateCreated
  • AuthorID
  • AuthorName (en cas l'utilisateur non enregistré)
  • AutherEmail (comme ci-dessus)
  • PostType (ENUM - 1 si la question, 2 si la réponse)
  • Afficher (champ bit)

Ensuite, il y a "PostBase" - qui est une classe abstraite (dont les propriétés sont communes à la fois Question et Réponse - listées ci-dessous) J'ai alors une classe interne "Post", qui descend de PostBase, et a donc toutes les propriétés listées ci-dessus.

Il existe alors une classe Question et une classe Answer.

Les deux utilisent Post comme classe de base.

Voici les classes:

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; } } 
} 

Poster

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

    public virtual string Title { get; set; } 

    public virtual string ParentPostID { get; set; } 
} 

Question:

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; } 
} 

Réponse:

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

J'utilise automapper pour mapper/de réponse et post ou question et post

Ce que je suis en train de faire, est de créer la classe suivante:

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

qui a essentiellement une « question » - rappelez-vous ceci est juste un poste dans le DB, avec un ParentPostID de 0, avec une liste de réponses (où ParentPostID est égal à Question.ID ... ou le long de ces lignes)

Ma question est - comment puis-je mapper ceci dans nHibernate fluent?

Répondre

1

Vous pouvez utiliser Automapper pour QuestionWithAnswers, mais les réponses doit avoir un IList et non un IEnumerable:

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

Ce que je ne comprends pas l'existence de QuestionWithAnswers, lorsque les éléments suivants (je pense) devrait faire:

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; } 
} 

Si la question a des réponses, vous les obtiendrez, et si ce n'est pas le cas, vous ne l'aurez pas.

Questions connexes