Creación de modelos
Clase 7 de 25 • Curso de Fundamentos de Entity Framework
Contenido del curso
Clase 7 de 25 • Curso de Fundamentos de Entity Framework
Contenido del curso
Esteban Ricardo Sierra
Daniel Osvaldo Lopez García
Nelson Arturo Cortes Briceño
Carlos Arturo Mendoza Mejía
KEYSY MARIEL HERNANDEZ MANJARRES
Steven Rendon
Kevin Castellano
Daniel David Mejia Vargas
Facundo Oubel
Kevin Castellano
Carlos Arturo Mendoza Mejía
Jonathan Cumini
Hans González
Jonathan Cumini
Platzi Team
Luis Enrique Carreño Herreño
Miguel Teheran
juan lopes
Jonathan Cumini
Juan Heredia
Carlos Arturo Mendoza Mejía
Felipe de Jesús Isidro
Miguel Teheran
Yaoska Margarita Telleria López
Miguel Teheran
Miguel Teheran
Juan Betancur
Miguel Teheran
Juan Carlos Gelpud Rosero
Miguel Teheran
Esteban Cerda Román
César David García Narro
Miguel Teheran
David Orlando Gomez Alarcon
Miguel Teheran
Kevin Eduardo Vásquez Oliva
Miguel Teheran
Leidy Ruiz
Miguel Teheran
Mauricio Zárate
Carlos Enrique Ruiz Medina
sergio Castro cano
Miguel Teheran
El tipo de dato Guid es un 'Identificador global único' el cual nos retorna un dato unico, ejemplo : 5a7939fd-59de-44bd-a092-f5d8434584de
muchísimas gracias, por el aporte.
tenia esa duda, gracias bro
Para los que no les gusta escribir todo el código desde cero pueden añadir esta extencion a su VSC: C# y C# Extensions asi no van a tener que escribir el namespace y la clase, ya las extensiones lo hacen por uno, van a ir al panel izquiedo en donde estan unos cuadrados dice extenciones y luego en añadir o pueden descargarlas.
Aqui les dejo los links:
yo tengo ambas extensiones y aun así me toca escribirlos, no se porque no me sale por defecto.
Hola , Intenta usar esta.
https://marketplace.visualstudio.com/items?itemName=kreativ-software.csharpextensions.
La que comparte el compañero ya està en desuso, por lo tanto, no tiene mantenibilidad y puede generar probemas de compatibilidad.
Si tienen el problema que sin importar el nombre de alguna de las clases creadas les arroja el error de que ya existe pueden ejecutar el comando "Restart OmniSharp".
Presionen Ctrl + Shift + P y en el cuadro de texto que se abre escriben "Restart OmniSharp" sin comillas y presionan Enter
Sabes porque sucede esto? Me funciono pero si me gustaría saber el porque.
Tambien me interesaria saber por que sucede esto
La palabra clave virtual se utiliza para modificar un método, propiedad, indizador o declaración de evento y permite invalidar cualquiera de estos elementos en una clase derivada.
Fuente:
Fuente de la fuente:
Kevin Castellano, están caídos los enlaces.
Los links no funcionan si les haces clic, pero puedes usar la URL sin problemas.
Para no estar escribiendo el public x x x , pueden escribir prop y automáticamente les generara el detalle del objeto con get y set, y solo es de cambiarle de que tipo y nombre :)
Excelente! Y propfull se usa para explicitar los métodos get y set (no para esta clase)
Creacion de Modelos
Lo primero que debemos hacer para crear nuestros modelos es crear una carpeta Models donde guardaremos nuestras clases para cada tabla:
En nuestro archivo Categoria.cs, creamos nuestro modelos con los atributos de igual manera en nuestro archivo Tara.cs
public class Categoria { public int Id { get; set; } public string Nombre { get; set; } public virtual ICollection<Tarea> Tareas { get; set; } } public class Tarea { public int Id { get; set; } public string Nombre { get; set; } public int CategoriaId { get; set; } public virtual Categoria Categoria { get; set; } }
**Guid**es un acrónimo que significa "Globally Unique Identifier", es decir, un Identificador Único Global en inglés. Es un tipo de datos que se utiliza para identificar de forma única y segura elementos, ya sea en una aplicación o en un sistema.
Los **Guid**se componen de 16 bytes que se combinan para formar un número único, y están diseñados para ser globales, es decir, que no se repitan en ninguna parte del mundo. Esto los hace muy útiles para identificar elementos únicos en un sistema distribuido, como por ejemplo, registros en una base de datos.
En el ejemplo anterior, se utiliza un **Guid**para identificar cada categoría y tarea, garantizando que cada una tenga un identificador único y no haya conflicto entre ellas.
Expandiendo los conocimientos:
Get**y Set son propiedades de acceso que permiten obtener y establecer valores para una propiedad determinada. En otras palabras, Get permite leer el valor de una propiedad y Set permite asignarle un nuevo valor. En el ejemplo de las clases Categoria y Tarea
, se utiliza una combinación de Get y Set para definir las propiedades Id, Nombre, CategoriaId y Categoria.Virtual es un modificador de acceso que permite a una propiedad ser sobreescrita en clases heredadas. En el ejemplo, la propiedad Categoria de la clase Tarea se marca como virtual para permitir que se sobreescriba en una clase heredada.ICollection<T> es una interfaz genérica que representa una colección de objetos que se pueden recorrer y modificar. En este caso, ICollection<Tarea> se utiliza para definir la propiedad Tareas en la clase Categoria, que representa una colección de tareas asociadas a una categoría.Que ventajas existen al usar como tipo de dato GUID para el identificador de una entidad? Que ventajas tienen respecto al uso de identities en SQL Server y sequences en PostgreSQL?
Excelente pregunta! GUID es unico en todo el entorno de la base de datos, usando un numerico autoincrementado vas a tener varios repetidos en cada tabla y esto imposbilita el buscar un registro de manera global. En las bases de datos NoSQL es casi mandatorio usar GUID por el tema de no manejar relaciones
En el contexto de EF, marcar una propiedad como virtual permite a EF usar la carga diferida para cargarla. Para que la carga diferida funcione, EF tiene que crear un objeto proxy que invalide las propiedades virtuales con una implementación que cargue la entidad a la que se hace referencia cuando se accede a ella por primera vez. Si no marca la propiedad como virtual, la carga diferida no funcionará con ella.
Gracias Juan! Podrías añadir un link donde se explique en mayor detalle? Soy de los que les gusta entender cada keyword :)
Por si tienen problemas y nos les funciona el Hello Word dentro de su IDE, les dejo las siguientes notas
Si ejecutamos nuestro proyecto y este no funciona, aparece el mensaje de using a preview package for this significa que estamos intentando compilar una versión que no es compatible y por lo tanto marcara errores, para solucionar esto debemos identificar la versión de net con la que estamos trabajando para eso usamos el comando dotnet –version Esto nos indicara la versión en la que estamos, algunas versiones solo son compatibles con el IDE más reciente con el que trabajamos, por ejemplo, la versión 6.0 no es compatible con Visual Studio 2019, por lo que no podremos indicarle que se trata de esta versión y no entenderá algunos comandos que le estamos enviando. Para abrir la pestaña de propiedades de un proyecto damos clic derecho sobre el y seleccionamos la versión de .NET
También podría funcionar si permitimos funciones preview en nuestro IDE, para ello nos dirigimos a las opciones de visual Studio (en la pestaña de Tools) y buscamos preview
Ahi te falto un signo de "-" amigo, el comando es este:
dotnet --version
Me gusto tu aporte :)
Por que los atributos de relación los coloca como virtual?
Para que la logica del atributo se pueda sobreescribir. de estamera intermente entity fraemwork hace la implementación y al momento de usarlo devuelve los datos relacionados
¿Por qué una de las propiedades es de ICollection y la otra no?, alguien tan amable que me explique
ICollection se necesita en EF cuando queremos hacer referencia sobre una collecion que se va cargar de manera virtual y que debe soportar todas las operaciones de una tabla es decir list, add, edit, delete
ICollection se necesita en EF cuando queremos hacer referencia sobre una colección que se va cargar de manera virtual y que debe soportar todas las operaciones de una tabla es decir list, add, edit, delete
Lo que haces con public virtual es hacer las relación de las llaves foráneas?
Para poder extraer información de la relación
Para que sirve el virtual? Lo he visto en muchas ocasiones pero no entiendo si el uso de este es para optimizar el uso en memoria.
Básicamente indica que puede una propiedad o método puede ser sobrescrito por cualquier clase que herede de el usando el override. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/virtual
Guid:
es un acrónimo. Significa "Globally Unique Identifier" = Identificador Único Global. Es un tipo de datos que se utiliza para identificar de forma única y segura elementos, ya sea en una aplicación o en un sistema.
Los Guid se componen de 16 bytes que se combinan para formar un número único, y están diseñados para ser globales, o sea, que no se repitan en ninguna parte del mundo. Esto los hace muy útiles para identificar elementos únicos en un sistema distribuido, como por ejemplo, registros en una BD.
Tengo problemas para llevar el curso, puesto estoy siguiendo la ruta Backend pero no es la primera vez que siguiendo la ruta me toco con un curso que me pide otros cursos. Mi duda es, para este curso realmente cuanto necesito saber de C# ya que menciono que existe un curso de C# que tomar, y es el primero en la ruta de Backend C# y .NET pero en ningún momento del curso vemos, propiedades o clases.
Hola Cesar, nos hace falta un curso en ese paso de POO con C# para poder enteder esa parte. Lamento mucho tu confusion. Hay curso que te peude servir simplemente que esta muy desactualizado pero en conceptos generales te puede ayudar: https://platzi.com/cursos/fundamentos-csharp-2/
No entendi el GUID y el Virtual, me lo prodrian explicar mejor
GUID es un identificador único en el contexto de la base de datos. Es super chevere por que te garantiza tener un identificador que no es autoincrementado y que no repite dentro de todo el contexto de la BD. muchas bases de datos vienen optimizadas para este tipo, mas información en:
virtual es una palabra clave reservada de C# que permite indicar que un método o que una propiedad se puede sobreescribir. Usamos esta propiedad en EF para que al momento de llenar la información poder enlazar la propiedad con la referencia de la base de datos.
¿El nombre del namespace puede ser cualquier nombre o debe estar relacionado al nombre de la carpeta que contiene el proyecto?
Generalmente se utiliza el nombre del proyecto y se va extendiendo por carpeta por ejemplo: MyProject MyProject.Models MyProject.Data
si las tablas tienen una relación como se puede especificar al modelo la relación que existe entre una clase y otra para que la tabla tenga la misma relación?
En las clases de mas adelante vamos aprender paso a paso esta parte de las relaciones para mas info acá: https://www.entityframeworktutorial.net/efcore/configure-one-to-many-relationship-using-fluent-api-in-ef-core.aspx
Me llama la atención que las propiedades de las clases se las declare de tipo public pero que se les agreguen getters y setters.
¿No sería mejor declararlas como private u omitir el uso de los getter y los setter?
Encapsulamiento con flexibilidad: Las propiedades como public string Titulo { get; set; } son una forma abreviada de declarar campos privados con acceso controlado. Aunque son públicas, permiten agregar lógica interna más adelante sin cambiar la interfaz pública.
public string Titulo { get => _titulo; set { if (string.IsNullOrWhiteSpace(value)) throw new ArgumentException("El título no puede estar vacío"); _titulo = value; } }
Las propiedades privadas solo se usan dentro de la clase, lo que limita su utilidad si necesitas exponer datos a otras partes del sistema.
Fuente: Copilot
Porque en Categoria se declara la propiedad virtual como ICollection?
Para que pueda sobreeescribirse por EF y cambiar el comportamiento