Cómo cargar eficientemente los datos de una tabla relacionada

Considere el siguiente requisito para crear una aplicación de foro

Parent Post

- Child Post1

    - Child Post1-1
    - Child Post1-2
        - Child Post1-2-1
- Child Post2
    - Child Post

- Child Post3
Estructura de tabla

tblPost -

ID del mensaj ChildPostIdTítulPublicar Contenid UserName

=====================

Puedo recuperar este tipo de datos utilizando un CTE recursivo. No estoy seguro de que este sea el mejor enfoque.

Preguntas

Cuál es la mejor manera de recuperar estos datos usando SQL?

Existe una mejor manera de cargar estos datos utilizando un ORM?

Si seguimos la ruta SQL, ¿cuál es la mejor manera de cargar estos datos en una clase como se muestra a continuación:

public class Post {
  public int PostId {get;set;}
  public string PostTitle {get;set;}
  public string PostContent {get;set;}
  public string PostedBy {get;set;}
  public IEnumerable<Post> ChildPosts {get;set;}
}

¿Qué le parece mostrar este tipo de datos usando la sintaxis de la maquinilla de afeitar para una vista?

Respuestas a la pregunta(2)

Su respuesta a la pregunta