CursosEmpresasBlogLiveConfPrecios

Conectado a base de datos con Fluent API

Clase 16 de 25 • Curso de Fundamentos de Entity Framework

Clase anteriorSiguiente clase

Contenido del curso

Introducción

  • 1
    Bienvenida y presentación

    Bienvenida y presentación

    01:51 min
  • 2
    Prerrequisitos

    Prerrequisitos

    03:04 min
  • 3
    Conexión a base de datos

    Conexión a base de datos

    07:20 min
  • 4
    ¿Qué es un ORM en programación?

    ¿Qué es un ORM en programación?

    08:51 min
  • 5
    Introducción a Entity Framework

    Introducción a Entity Framework

    06:53 min
  • 6
    Creación de proyecto .NET con Entity Framework

    Creación de proyecto .NET con Entity Framework

    11:57 min

Iniciando con Entity Framework

  • 7
    Creación de modelos

    Creación de modelos

    08:28 min
  • 8
    Configuración de Entity Framework

    Configuración de Entity Framework

    06:53 min
  • 9
    Mapeo de modelos usando atributos

    Mapeo de modelos usando atributos

    09:52 min
  • 10
    Utilizando base de datos en memoria

    Utilizando base de datos en memoria

    10:13 min
  • 11
    Conectado a base de datos SQL server

    Conectado a base de datos SQL server

    10:53 min
  • 12
    Agregando conexión al archivo appsettings

    Agregando conexión al archivo appsettings

    07:28 min

Utilizando Fluent API

  • 13
    Introducción a Fluent API

    Introducción a Fluent API

    03:29 min
  • 14
    Creando modelo de categoría con Fluent API

    Creando modelo de categoría con Fluent API

    08:30 min
  • 15
    Creando modelo de tarea con Fluent API

    Creando modelo de tarea con Fluent API

    07:36 min
  • 16
    Conectado a base de datos con Fluent API

    Conectado a base de datos con Fluent API

    Viendo ahora

Migraciones

  • 17
    ¿Qué son las migraciones?

    ¿Qué son las migraciones?

    03:14 min
  • 18
    Inicializar las migraciones

    Inicializar las migraciones

    11:27 min
  • 19
    Creando una migración

    Creando una migración

    07:18 min
  • 20
    Agregando datos semilla

    Agregando datos semilla

    16:31 min

Consumo de datos

  • 21
    Obteniendo datos con Entity Framework

    Obteniendo datos con Entity Framework

    11:31 min
  • 22
    Guardando datos con Entity framework

    Guardando datos con Entity framework

    09:07 min
  • 23
    Actualizando datos con Entity framework

    Actualizando datos con Entity framework

    10:17 min
  • 24
    Eliminando datos con Entity framework

    Eliminando datos con Entity framework

    07:59 min

Cierre del curso

  • 25
    Continúa tu camino desarrollando

    Continúa tu camino desarrollando

    01:45 min
Tomar examen
    Randall Chacón Sarmiento

    Randall Chacón Sarmiento

    student•
    hace 4 años

    Aquí les dejo mi código en inglés :)

    protected override void OnModelCreating(ModelBuilder modelBuilder) //Instead Data Annotations { modelBuilder.Entity<Category>(cat =>{ cat.ToTable("Category"); cat.HasKey(p => p.CategoryId); cat.Property(p => p.Name).IsRequired().HasMaxLength(150); cat.Property(p => p.Description); }); modelBuilder.Entity<Homework>(h => { h.ToTable("Homework"); h.HasKey(p => p.HomeworkId); h.HasOne(p=> p.Category).WithMany(p => p.Homeworks).HasForeignKey(p => p.CategoryId); h.Property(p => p.Title).IsRequired().HasMaxLength(200); h.Property(p => p.Description); h.Property(p => p.PriorityHomework); h.Property(p => p.CreationDate); h.Ignore(p => p.Summary); }); }
      KEVIN A. DERAS

      KEVIN A. DERAS

      student•
      hace 3 años

      Puedes usar task en lugar de homework.

      Platzi Team

      Platzi Team

      student•
      hace 3 años

      Yo tambien lo intente dejar como Task pero en ID te arroja un error de sobreescribir una clase

    Gabriel Mayorga

    Gabriel Mayorga

    student•
    hace 3 años

    Si les da error, recuerden agregar ignore del resumen

    tarea.Ignore(p => p.resumen);

    De manera que el código quede así:

    modelBuilder.Entity<Tarea>(tarea => { tarea.ToTable("Tarea"); tarea.HasKey(p => p.TareaId); tarea.HasOne(p=> p.Categoria).WithMany(p=> p.Tareas).HasForeignKey(p=> p.CategoriaId); tarea.Property(p => p.Titulo).IsRequired().HasMaxLength(200); tarea.Property(p => p.Descripcion); tarea.Property(p => p.PrioridadTarea); tarea.Property(p => p.FechaCreacion); tarea.Ignore(p => p.resumen); });
      Gustavo Medina Limon

      Gustavo Medina Limon

      student•
      hace 2 años

      Gracias Bro!

      Wilson Bienvenido Otaño Mateo

      Wilson Bienvenido Otaño Mateo

      student•
      hace 2 años

      muchísimas gracias, hermano

    hackerman Jimenez

    hackerman Jimenez

    student•
    hace 2 años

    Bueno , yo tengo una pregunta , cual es la utilidad realmente de la fluent API , porque yo hice una pequeña practica antes de ver todos los temas de este curso y utilice los modelos con sus parámetros por cada atributo de la clase y configure los modelos para sus relaciones hice las migraciones y funciona perfectamente la Web API minimalista que realice. Aqui es donde veo llegar la Fluent API como mejor manera de relacionar y inicializar una tabla, pero yo desde mi punto de vista veo que es como escribir 2 veces el código porque con la primera forma podes organizar tus modelos bien ordenados sin la necesidad de tener una función que inicie todas tus tablas desde el contexto, porque llega el caso de tener 50 tablas o mas y estas usando fluent API vas a tener que iniciar y relacionar las 50 tablas desde el contexto en una misma función, causando mas confusión que buenas practicas. ¿Tienen algún proyecto de ejemplo que tenga implementado la fluent API con la capacidad de tener mas de 20 tablas o 50 tablas? , para mirar cual es el abordamiento que hacen con esta Fluent API que me deja con varias dudas para implementarla en proyectos. Muchas gracias por leer y espero que esto ayude a unos como a mi.

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 2 años

      Fluent API te permite tener un unico punto de configuracion para toda la BD siendo mas facil poder administrar los cambios que ir de modelo en modelo. Por otro lado FluenAPI cuenta con un numero mas amplio de funciones que nos permite configurar mejor la BD los atributos no cumplen con todo.

      Por ejemplo esto para manejar anotaciones:

      modelBuilder .Entity<Department>() .Property(t => t.Name) .HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute()));

      o este para configurar el concurrecy token:

      modelBuilder.Entity<OfficeAssignment>() .Property(t => t.Timestamp) .IsConcurrencyToken();
      José Gabriel González Pérez

      José Gabriel González Pérez

      student•
      hace un año

      Aún después de leer la explicación del profesor, sigo coincidiendo con éste comentario. No le veo la ventaja a Fluent API.

      Por ejemplo, decir que "tener un único punto de configuración para toda la BD" es una ventaja, imho yo no lo veo así, las clases modelos describen la estructura de tus tablas y es así en mucho otros ORMs. Querer tener todo en sólo sitio, no lo veo como una buena práctica, de hecho lo veo como un código poco mantenible en el tiempo, en cambio si tienes la estructura en cada uno de tus modelos con Data Annotations y quieres hacer una modificación sólo vas al modelo que quieres modificar, lo actualizas y listo.

      Que hayan más funcionalidades en Fluent API sólo me dice que el que hizo el módulo de Data Annotations renunció al trabajo, llegó una persona nueva y decidió no mantenerlo ni agregarle nuevas funcionalidades porque no entendía el código y creó una nueva manera de definir la estructura de la base de datos de forma un poco caprichosa. He visto algo parecido a ésta forma programática de definir la estructura de las tablas de tu DB esto en otros ORMs pero, para definir/generar las migraciones, no de ésta manera.

      Por cierto, un poco imposible escribir en éste editor de texto WYSWYG, muy lento y mientras escribes bloquea funcionalidades y las palabras aparecen después de mil años y ni se te ocurra agregar un acento, te descoloca todo el texto.

      Por otra parte, en general el curso muy bueno, pero, es que no entiendo cuando hacen éste tipo de cosas en tecnologías que funcionan perfectamente a través de muchos ORM y diferentes lenguajes y quieren venir a ponerlo más complicado sólo porque le agregan más funcionalidades a ésa nueva manera de hacer las cosas.

    Juan Sebastian Ramirez Leyva

    Juan Sebastian Ramirez Leyva

    student•
    hace 4 años

    En que momento se realiza el tema de migraciones?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 4 años

      Cuando se crea la BD se ejecutan todas las migraciones que esten pendientes

    Alexis Gamaliel Sotelo Valdez

    Alexis Gamaliel Sotelo Valdez

    student•
    hace 3 años

    Si al no especificar tarea.Ignore(p => p.Resumen);, el campo resumen aun asi se agregó dentro de la base de datos, entonces eso quiere decir que si no tengo nada que agregarle a una propiedad como por ejemplo : tarea.Property(p => p.PrioridadTarea); tarea.Property(p => p.FechaCreacion); No es necesario que los ponga cierto? simplemente no los pongo y aún asi se van a poner dentro de la base de datos. De esa manera tengo menos código.

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Si correcto, se agregan no mas para mantener la coherencia y si toca hacer algun cambio sea mas f[acil pero no es necesario, apenas se define el modelo como Table el toma todos los cambios.

    Gaspar.meza

    Gaspar.meza

    student•
    hace 3 años

    ¿Como indico que una propiedad acepta valores nulos? ¿Tendran un ejemplo creando desde EF y con Fluent API?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Simplemente indicas que la propiedad puede ser nula de cualquiera de estas 2 formas: public int? Property { get; set; } public System.Nullable<int> Property { get; set; }

      Igual pasa con string cuando estas usando las ultimas versiones de .NET

    Paulo Jirón

    Paulo Jirón

    student•
    hace 4 años

    Si tengo herencia en mis clases como lo reflejo en EF?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 4 años

      En teoria deberia tomarlo automaticamente. puedes crear una clase que herede de otra, crearle su respectivo dbset y luego configurar cada propiedad de la entidad incluyendo las propiedaddes que son heredadas.

      Jossie Steeven Quintero Giron

      Jossie Steeven Quintero Giron

      student•
      hace 3 años

      Deberían hacer un curso Profesional o Avanzado de Entity Framework.

    Juan Betancur

    Juan Betancur

    student•
    hace 4 años

    ¿Puedo borrar la base de datos desde consola?

      Hector Hugo Luna Miranda

      Hector Hugo Luna Miranda

      student•
      hace 4 años

      Si puedes usar el comando de EF Drop-Database

      Para ver ejemplos puedes utilizar: get-help Drop-Database -examples

    hackerman Jimenez

    hackerman Jimenez

    student•
    hace 2 años

    ¿Otra pregunta como creo las tablas en su base de datos sin hacer migraciones?

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 2 años

      Puees generar un script SQL apartir de la estructura de la BD definida en FLuent API o puedes manualmente crear la BD con sus tablas pero deben ser iguales los tipos por obligacion

    Sergio Sanchez

    Sergio Sanchez

    student•
    hace 2 años

    Que approach o alcance es mejor cuando se diseña data-models? o en que caso aplica cada uno?

    1. Data Base first?
    2. Code First?
      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 2 años

      desde .NET core 5.0 siempre se utiliza Code first la idea es tener todo el detalle de la BD directamente desde el código

    edwin marin

    edwin marin

    student•
    hace 3 años

    Cuando el profe ejecuta dotnet run, la terminal muestra 10 errores que el profe los obvia. Además debería explicar lo de Postman. Yo no puede hacer la conexión desde Postman

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Hola Edwin en .NET no es posible ejecutar una App si tiene errores. De pronto lo que salen son warnings o advertencias, estas generalmente aparecen en gran medida por que los String cambiaron en las ultimas versiones de C# y pueden ser not null.

      Para llamar desde postman solo debes colocar la URL y listo no hay como mayor inconveniente. Puedes usar otras herramientas

      Aca hay una lista muy interesante: https://davidcasr.medium.com/herramientas-de-testeo-de-apis-e376b2ffaa5f

    Miguelangel Diaz

    Miguelangel Diaz

    student•
    hace 3 años

    Hola, alguien me puede explicar por que razón la PK generadas desde EF son char(36) y no bigints?

    Tengo entendido que manejar numeros es mucho mas eficiente para la indexación.

      Miguel Teheran

      Miguel Teheran

      teacher•
      hace 3 años

      Hola Neila, el tipo depende del que uses en tu modelo osea tu clase en C#. debes colocarlo en tipo int para que se usa int en la BD. también se utiliza muchos el tipo guid por que permite un id unico dentro del contexto de la base de datos

    José Gabriel González Pérez

    José Gabriel González Pérez

    student•
    hace un año

    Parece que hay que indicar que los campos no son required en Fluent API, porque todos se crearon como Not Null :/

    Carlos Matias Avanzini

    Carlos Matias Avanzini

    student•
    hace un año

    En mi caso no fue necesario poner la linea tarea.Ignore(p=>p.Resumen

    )

    Carlos Humberto Meza Infante

    Carlos Humberto Meza Infante

    student•
    hace 2 años

    Hola profe Miguel, una consulta, de acuerdo a esta respuesta, aportado por Ud.,

    Fluent API te permite tener un unico punto de configuracion para toda la BD siendo mas facil poder administrar los cambios que ir de modelo en modelo. Por otro lado FluenAPI cuenta con un numero mas amplio de funciones que nos permite configurar mejor la BD los atributos no cumplen con todo.

    Si estoy trabajando un proyecto web, con EF, MVC, es aconsejable usar fluent API, lo digo por el uso de clases que actuan como DTO para enviar información del controlador a la vista

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads