miércoles, 21 de agosto de 2019

Claves foraneas en Code First

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