Las claves foraneas son relaciones entre tablas que guardan relacion mediante un Id
A continuacion se muestra una relacion de clave foranea entre las clases "BlogPost" y "Comentario"
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace EFCodeFirst.Models
{
public class BlogPost
{
public int Id { get; set; }
[Required]
[StringLength(200)]
[Display(Name = "Título")]
public string Titulo { get; set; }
[Required]
[StringLength(500)]
public string Contenido { get; set; }
[Required]
[StringLength(150)]
public string Autor { get; set; }
[Required]
[Display(Name = "Fecha De Publicación")]
public DateTime Publicacion { get; set; }
public List<Comentario> Comentarios { get; set; }
}
}
Clase Comentario.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace EFCodeFirst.Models
{
public class Comentario
{
public int Id { get; set; }
public int Contenido { get; set; }
public int Autor { get; set; }
public int BlogPostId { get; set; }
[ForeignKey("BlogPostId")]
public BlogPost BlogPost { get; set; }
}
}
De esta manera tanto las clases "BlogPost" como "Comentario" se unifican y pueden relacionar y consultar su data entre si.
Para vincular y relacionar post con comentarios hacemos lo siguiente:
Modificamos la clase "BlogPostRepository.cs" donde se observa que con include se incluye "Comentarios"
using System.Data.Entity;
namespace EFCodeFirst.Services
{
public class BlogPostRepository
{
public List<BlogPost> ObtenerTodos()
{
using ( var db = new BlogContext() )
{
return db.BlogPosts.Include(x => x.Comentarios).ToList();
}
}
}
}
En la clase "BlogPostController.cs" se muestra que dentro de la variable comentario estamos guardando el primer comentario del primer post
// GET: BlogPost
public ActionResult Index()
{
var model = _repo.ObtenerTodos();
var comentario = model[0].Comentarios[0];
return View(model);
}
No hay comentarios.:
Publicar un comentario