Platzi Team
EstudianteSantiago Delavilla Sariella
EstudianteRoberto Carlos Herrera
EstudianteCelso ariel Santa cruz
EstudianteCarlos Andrés Castro Moreno
EstudianteDavid Santa Cruz
EstudianteMarcos Avila Rodriguez
EstudianteJhordy Samuel Toro Arroyo
EstudianteJuan Betancur
EstudianteGabriel Araya
EstudianteLUIS ANGEL GALLEGO VILLA
EstudianteGonzalo Chaparro
EstudianteMiguel Teheran
ProfesorJuan Betancur
EstudianteFelipe de Jesús Isidro
EstudianteMiguel Teheran
ProfesorDaniel Meza
EstudianteMiguel Teheran
ProfesorJuan Rossano
EstudianteMiguel Teheran
ProfesorJuan Betancur
EstudianteMiguel Teheran
ProfesorJuan Betancur
EstudianteMiguel Angel Porras Villarreal
EstudianteVictor Alexander De Jesus De Nobrega
EstudianteSebastián Sebastian NavarroC.
EstudianteMiguel Teheran
ProfesorSebastián Sebastian NavarroC.
EstudianteMiguel Teheran
ProfesorJhon Alexander Perez Beltran
EstudianteMiguel Teheran
ProfesorJhon Alexander Perez Beltran
Estudiantejoan luna
EstudianteMiguel Teheran
ProfesorGaspar.meza
EstudianteMiguel Teheran
ProfesorStalyn Contreras
EstudianteDaniel Valencia Alvarez
EstudianteConfiguración de Entity Framework
Para realizar la configuracion de EntityFramework creamos un archivo para nuestro contexto:
using Microsoft.EntityFrameworkCore; using projectef.models; namespace TaskContext; public class TaskContext : DbContext { public DbSet<Category> categories { get; set; } public DbSet<Homework> homeworks { get; set; } public TaskContext(DbContextOptions<TaskContext> options) : base(options) { } }
using Microsoft.EntityFrameworkCore; incluye el namespace que contiene la clase base DbContext.using projectef.models; incluye el namespace que contiene los modelos de datos que se van a utilizar en la aplicación.TaskContext hereda de DbContext y representa el contexto de Entity Framework para la aplicación.categories y tasks. Estas propiedades representan las tablas en la base de datos y se declaran como DbSet.DbContextOptions<TaskContext> y lo pasa a la clase base DbContext para que pueda establecer la configuración necesaria para la conexión a la base de datos.Contexto:
El contexto es una clase en Entity Framework que representa una conexión a una base de datos y permite el acceso a los datos en la base de datos.
Es el intermediario entre la aplicación y la base de datos, y se encarga de traducir las operaciones de la aplicación en instrucciones que la base de datos puede comprender y ejecutar. Además, el contexto también administra el ciclo de vida de las entidades y sus cambios en la base de datos.
En resumen, el contexto es un componente clave en Entity Framework que actúa como intermediario entre la aplicación y la base de datos y facilita el acceso a los datos en la base de datos.
me salvaste porque no entendi casi nada en el video jaja
Gracias
este chavon no explica nada. te dice lo que hay que hacer pero no te explica que es cada cosa. la verdad copie lo que hizo pero no entendi que hice ni por que. si lo quiero replicar por mi cuenta no se que hacer
Le esta explicando textualmente para que se hace esta configuracion en el minuto 6:02 del video, de resto no creo que un tutor deba explicar cada linea de codigo si se tiene un minimo de conocimiento en C#
La verdad la explicación del código fue muy superficial, a continuación mi colaboración para los compañeros que no entendieron nada.
1) Al usar un ORM como Entity Framework Core, se hace un mapeo de la base de datos y tablas a clases de C#.
En este caso para representar la base de datos se debe crear una clase que herede de DbContext, EF Core usa esta clase como puente entre C# y la base de datos.
Para representar cada tabla de la base de datos se crea un modelo, en este caso una clase de C# con las propiedades equivalentes de cada columna de la tabla.
Para completar el puente entre el modelo y cada tabla de la base de datos, dentro de la clase que hereda de DbContext, se debe crear una propiedad del tipo DbSet<ModeloTabla>, esta es genérica por eso en lugar de ModeloTabla se coloca el nombre de la clase que representa el modelo de una tabla.
2) Respecto al constructor donde usa DbContextOptions, es un patrón llamado Options que creó Microsoft y lo usa mucho con inyección de dependencias para inyectar parámetros, en este caso los datos para conectarse a la base de datos que sería la cadena de conexión.
El patrón options en realidad es una clase simple que envuelve o contiene propiedades de configuración como puede ser la cadena de conexión y que se pasa por inyección de dependencias cuando se crea una instancia del objeto en este caso del DbContext.
Gracias por el libro, buen recurso para iniciar rápido con EF.
Me pueden explicar mejor que hace esta linea de codigo? (Es lo mismo del profe pero en ingles)
sí, por favor que alguien nos explique 😊
"public TareasContext(DbContextOptions<TareasContext> options)" es el constructor de la clase TareasContext. Un constructor es un método que se llama cuando se crea una nueva instancia de una clase. En este caso, el constructor de la clase TareasContext recibe un objeto DbContextOptions<TareasContext> como argumento.
"base(options)" es el constructor de la clase base, que en este caso es DbContext. Una clase puede heredar de otra clase, y cuando se hace esto, la clase hija tiene acceso a todas las propiedades y métodos de la clase padre. El constructor de la clase padre se llama con el operador ":", seguido del nombre del constructor y sus argumentos entre paréntesis.
En este caso, el constructor de la clase TareasContext está llamando al constructor de la clase base, DbContext, y le está pasando el objeto DbContextOptions<TareasContext> como argumento. Esto significa que el constructor de la clase TareasContext tiene acceso a todas las propiedades y métodos del constructor de la clase base, y puede usar o sobreescribir cualquiera de ellos según sea necesario.
Repondido por ChatGPT :P
Hola:
Considero importante aclarar que se debe instalar la extensión ".NET Core Extension Pack" para que el Visual Studio Code ayude con la inserción de los using; de lo contrario, tienes qué hacerlo manualmente...
Profe, esta sería la forma de configurar Entity Framework en una relacion 1:N, nos podria dar ejemplos de cuando se hace con relaciones 1:1 o N:N?
Este es un ejemplo de 1:1, en lugar de poner WithMany usar WithOne:
modelBuilder.Entity<Author>() .HasOne(a => a.Biography) .WithOne(b => b.Author) .HasForeignKey<AuthorBiography>(b => b.AuthorRef);
Este seria un ejemplo de muchos con muchos:
modelBuilder.Entity<BookCategory>()
.HasKey(bc => new { bc.BookId, bc.CategoryId });
modelBuilder.Entity<BookCategory>()
.HasOne(bc => bc.Book)
.WithMany(b => b.BookCategories)
.HasForeignKey(bc => bc.BookId);
modelBuilder.Entity<BookCategory>()
.HasOne(bc => bc.Category)
.WithMany(c => c.BookCategories)
.HasForeignKey(bc => bc.CategoryId);
Para mas info te recomiendo este sitio: https://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration
no entendí bien como es que se haces los diferentes tipos de relaciones entre tablas, porque en esta clase lo que el profe está escribiendo no se vio
Esto se me asemeja tanto a laravel con su Eloquent ORM
Si, los ORM son muy parecidos y tienen el mismo fin. La idea es entender como funcionan por que el detalle se puede consultar en la documentación, esto te va permitir ser un poco mas agnóstico al lenguaje.
¿Cómo debería configurarse EF cuando tienes entidades que van a heredar de otra, para que eso se refleje en la BD
No deberias tener problemas, no existe ninguna configuración solo debes heredar y luego en FuentAPI indicas como se va procesar esas propiedades
Me aparece como en la pantalla subrayado el metodo TareasContext con el mensaje que Categorias no acepta nulos y debe contener un valor distinto de nulo al salir del constructor ¿a que se debe? ¿o se corrige mas adelante?
Es una advertencia común, sin no se le coloca valor en el contrustor quedaria nula y peude causar errores de ejecución sin embargo no es necesario.
Estoy creando los modelos tal cual lo estamos viendo en el curso. Luego de tener los modelos y el context listo estoy usando scaffolding para crear los controladores y las vistas. Luego de tener las vistas y los controladores creados hago pruebas con el create y el edit pero no me crea ni me edita. Le estoy haciendo seguimiento al código y cuando entra al if del create donde está validando si el modelo es válido este salta directamente y se sale de la ejecución, no sé por qué sucede, pero cuando quito la colección de matrículas ahí si me deja crear sin problema
este es el código de crear del modelo del controlador
public async Task<IActionResult> Create([Bind("Id,Nombre,Descripcion")] Curso curso) { if (ModelState.IsValid) { curso.Id = Guid.NewGuid(); _context.Add(curso); await _context.SaveChangesAsync(); return RedirectToAction(nameof(Index)); } return View(curso); }
este es el modelo de curso
public class Curso { public Guid Id { get; set; } public string Nombre { get; set; } public string Descripcion { get; set; } public virtual ICollection<Matricula> Matriculas { get; set; } }
este es el modelo de matriculas
public class Matricula { public Guid Id { get; set; } public DateTime Fecha { get; set; } public Guid EstudianteId { get; set; } public Guid CursoId { get; set; } public Guid DocenteId { get; set; } public virtual Estudiante Estudiante { get; set; } public virtual Curso Curso { get; set; } public virtual Docente Docente { get; set; } }
Todo se ve bastante bien. Intenta ponerle [JsonIgnore] para excluirlo del Json cuando se recibe y se devuelve de pronto se soluciona.
No funciona, esto es lo que esta sucediendo. primero ingreso a la vista para ingresar la información
cuando presiono en el botón create pasa esto
el campo colección de matrículas se ingresa como null, y al no poder ser null no entra en el if y no crea el nuevo curso
Miguel espero puedas ayudarme con esto, me estoy preparando para una entrevista técnica de c# con .NET y esto hace parte de los requerimientos de la entrevista.
gracias
DbContext es una clase fundamental en Entity Framework y Entity Framework Core que actúa como el puente entre tu código de aplicación y la base de datos. Proporciona una interfaz para interactuar con las entidades (clases de modelo) y realizar operaciones de lectura y escritura en la base de datos.
En esencia, DbContext es una representación del modelo de datos de tu aplicación y contiene conjuntos de entidades que representan las tablas de la base de datos. Cada entidad en el DbContext representa una fila en la tabla correspondiente.
Algunas de las tareas que puedes realizar con DbContext incluyen:
DbContext traduce tus consultas LINQ en comandos SQL para ejecutar en la base de datos.DbContext.DbContext realiza un seguimiento de los cambios realizados en las entidades y los mantiene en memoria hasta que los confirmes mediante una operación de guardado (SaveChanges).Un ejemplo simple de cómo se crea y se utiliza un DbContext en C# con Entity Framework Core:
csharpCopy code using Microsoft.EntityFrameworkCore; public class MyDbContext : DbContext { // DbSet para representar una tabla en la base de datos public DbSet<Product> Products { get; set; } // Configuración de la cadena de conexión a la base de datos protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("tu_cadena_de_conexion"); } } public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } }
En este ejemplo, se crea un DbContext llamado MyDbContext que contiene un DbSet para representar la tabla "Products" en la base de datos. La cadena de conexión se establece en el método OnConfiguring. Luego puedes utilizar MyDbContext para interactuar con la base de datos a través de las entidades Product.
Recuerda que, antes de utilizar un DbContext, debes instalar el paquete NuGet necesario y configurar correctamente la cadena de conexión en tu aplicación
Según la clase Entity Framework es interesante por que nos permite crear un contexto donde tengamos toda la relación que tenemos con la finalidad de transfórmalo en colecciones que se representaran en la base de datos
que hay de mal en mi Tareas Context???? me da 7 errores
using Microsoft.EntityFrameworkCore; using projectef.Models;
namespace projectef;
public class TareasContext: DbContext
{ public DbSet<Categoria> Catogorias {get;set;}
public DbSet<Tarea> Tareas {get;set;} public TareasContext(DbContextOptions<TareasContext> options) :base(options){ }
}
Esta clase se ve bastante bien, no veo el error
C:\platzi\projectef\TareasContext.cs(3,29): error CS0246: El no text' no se encontró (¿falta una directiva using o una referenc ctef.csproj] C:\platzi\projectef\TareasContext.cs(6,12): error CS0246: El no <>' no se encontró (¿falta una directiva using o una referencia ef.csproj] C:\platzi\projectef\TareasContext.cs(6,18): error CS0246: El no oria' no se encontró (¿falta una directiva using o una referenc ctef.csproj] C:\platzi\projectef\Models\Categoria.cs(15,36): error CS0246: E area' no se encontró (¿falta una directiva using o una referenc ctef.csproj] C:\platzi\projectef\TareasContext.cs(8,12): error CS0246: El no <>' no se encontró (¿falta una directiva using o una referencia ef.csproj] C:\platzi\projectef\TareasContext.cs(8,18): error CS0246: El no ' no se encontró (¿falta una directiva using o una referencia d .csproj] C:\platzi\projectef\TareasContext.cs(10,26): error CS0246: El n ntextOptions<>' no se encontró (¿falta una directiva using o un ctef\projectef.csproj]
ERROR al compilar.
El error no es claro, parece que quedo cortado. Pero debes revisar bien los using que estan agregando ala archivo. Visual Studio tye ayuda a identificar si algo esta faltando o si las directivas estan mal escritas, en el caso de Visual Code tiene que hacerse manual.
Hola tengo una duda, si yo quisiera trabajar un proyecto solo con el ORM de EntityFramework, como deberia crear el proyecto debido a que no puedo crearlo como api y quiero crearlo con net core
Te refieres a que quieres crearlo como una aplicación de consola ? la configuración es exactamente la misma, no tiene problema.
Seria como una biblioteca pero no estoy seguro que funcione con net core las librery
como hace para que le aparezca las le opcion de agregar using cuando pone el mouse ensima ?
Solo debes instalar la extension de C# para visual studio code
¿Que extension permite dar sugerencias para agregar los using faltantes?
Solo debes tener la extension de C#
Profesor Miguel me ha quedado una duda. Me gustaría que quedara más clara la construcción de los contextos. En un proyecto más robusto y grande, ¿Cada modelo debe contar con un archivo de contexto propio dentro de una carpeta con dichos contextos?