Translate

lunes, 14 de junio de 2021

Introducción a Entity Framework Core 5 parte 3


Seguimos EF.

Cada solución de EF Core tendrá al menos una implementación de DbContext. ¿Qué es DbContext? DbContext es una clase base especializada que rastrea nuestras operaciones en memoria, lo que nos permite escribir y ejecutar consultas, rastrear cambios que podemos persistir en nuestra base de datos e interactuar con nuestro motor de base de datos de manera indirecta o directa en circunstancias excepcionales.

Para comenzar a usar EF Core 5, necesitamos definir una clase que se derive de DbContext y contenga nuestros modelos. Normalmente, nuestras clases se asignarán una a una con las tablas de nuestra base de datos, y las relaciones entre las tablas se definen mediante convenciones de navegación. Veremos cómo funciona esto a medida que vayamos definiendo nuestras clases.

Para esta teoría vamos a hacer un modelado simple, con Entity Framework nuestras clases no son obligadas a extender de una clase del framework o tener algo especial. 

En nuestro ejemplo vamos a definir clases que modelen la lógica de un blog. 

using System.Collections.Generic;

using Microsoft.EntityFrameworkCore;


namespace EFGetStarted

{

    public class BloggingContext : DbContext  {

        public DbSet<Blog> Blogs { get; set; }

        public DbSet<Post> Posts { get; set; }


        // The following configures EF to create a Sqlite database file as `C:\blogging.db`.

        // For Mac or Linux, change this to `/tmp/blogging.db` or any other absolute path.

        protected override void OnConfiguring(DbContextOptionsBuilder options)

            => options.UseSqlite(@"Data Source=C:\blogging.db");

    }


    public class Blog

    {

        public int BlogId { get; set; }

        public string Url { get; set; }


        public List<Post> Posts { get; } = new List<Post>();

    }


    public class Post

    {

        public int PostId { get; set; }

        public string Title { get; set; }

        public string Content { get; set; }


        public int BlogId { get; set; }

        public Blog Blog { get; set; }

    }

}

Los siguientes pasos utilizan migraciones para crear una base de datos.

> dotnet ef migrations add InitialCreate

> dotnet ef database update

El comando de migraciones crea una migración para crear el conjunto inicial de tablas para el modelo. El comando de actualización de la base de datos crea la base de datos y le aplica la nueva migración. 

Veamos un ejemplo de creación, lectura, update y delete: 


using System;

using System.Linq;


namespace EFGetStarted

{

    internal class Program

    {

        private static void Main()

        {

            using (var db = new BloggingContext())

            {

                // Note: This sample requires the database to be created before running.


                // Create

                Console.WriteLine("Inserting a new blog");

                db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });

                db.SaveChanges();


                // Read

                Console.WriteLine("Querying for a blog");

                var blog = db.Blogs

                    .OrderBy(b => b.BlogId)

                    .First();


                // Update

                Console.WriteLine("Updating the blog and adding a post");

                blog.Url = "https://devblogs.microsoft.com/dotnet";

                blog.Posts.Add(

                    new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });

                db.SaveChanges();


                // Delete

                Console.WriteLine("Delete the blog");

                db.Remove(blog);

                db.SaveChanges();

            }

        }

    }

}


Dejo link: https://docs.microsoft.com/en-us/ef/core/get-started/overview/first-app?tabs=netcore-cli