none
Para que sirve virtual Ienumerable? RRS feed

  • Pregunta

  • Hola

    Estoy practicando un proyecto de prueba? pero me estoy guiando de un código para ver su funcionamiento. En realidad yo manejo .aspx .net c# pero veo que MVC esta mucho mas potente. Me llama la atención algo.

    Una clase tiene por ejemplo

    public class Agenda 2: { 3: public int AgendaId { get ; set ; } 4: public string Propietario { get ; set ; } 5: public DateTime FechaCreacion { get ; set ; } 6: 7: public virtual ICollection <Evento> Eventos { get ; set ; } 8: }

    Estaba leyendo este post y copio este código de ejemplo de aqui

    https://social.msdn.microsoft.com/Forums/es-ES/84ded463-7147-44c7-9e1e-bbb9a0b884e1/que-quiere-decir-virtual-en-esta-clase?forum=aspnetmvces

     para que sirve el virtual icollection <evento>Eventos osea no entiendo que beneficio me daría si puedo hacer con una consulta de linq en entity framework para traer la lista de eventos según el id de la agenda. En el post esta un comentario que dice que permite hacer un override pero como lo uso el virtual? Me podrían simplificar mas por favor. Estoy buscando por todo lado pero no veo que expliquen el que me beneficia.

    Pensando yo sobre para que sirve el virtual icollection -> MVC 5 es tan potente que si traigo la agenda me trae automáticamente todos los Eventos asociados a la agenda solicitada por id en la una lista icollection de la clase evento?

    Porque veo que si no uso virtual icollection <> me serviría igual. Por favor yo se que algunos con una linea de código entiende pero yo tengo que leer un poco mas detallado para entenderlo.

    Desde ya muchas gracias

    domingo, 7 de junio de 2015 21:52

Respuestas

  • hola

    >>para que sirve el virtual icollection <evento>Eventos osea no entiendo que beneficio me daría si puedo hacer con una consulta de linq en entity framework para traer la lista de eventos según el id de la agenda.

    es que justamente, si defines la relacion entre las entidades no tienes que hacer nada en linq para unirlas, es directo

    la definicion de la relacion la define entity framework y tu solo usarias el Include() para traer los eventos de la agenda en caso de necesitarlos

    >>En el post esta un comentario que dice que permite hacer un override pero como lo uso el virtual?

    el virtual no es para que tu lo sobreescribas, sino que lo usa EF para poder hacer lazy load

    >>Pensando yo sobre para que sirve el virtual icollection -> MVC 5 es tan potente que si traigo la agenda me trae automáticamente todos los Eventos asociados a la agenda solicitada por id en la una lista icollection de la clase evento?

    si asi lo defines en la query de linq si, pero no es mvc el potente en esa accion sono que lo es EF

    >>Porque veo que si no uso virtual icollection <> me serviría igual.

    si seguro funcione, pero no se recomienda ya que siempre estara cargando la coleccion lo necesites o no

    Loading Related Entities

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Ja1000_pu domingo, 7 de junio de 2015 23:16
    domingo, 7 de junio de 2015 23:10

Todas las respuestas

  • Hola,

    Para empezar, la clase Agenda y sus miembros no tienen nada que ver con MVC. MVC es un patrón que tiene que ver con la capa de presentación donde cada uno de sus componentes interactua entre si guardando un flujo que da sustento al patrón. 

    La (M) de MVC corresponde al modelo que podría hacer referencia a clases POCO o generadas por EF y precisamente la definición de ese miembro como Virtual ICollection permite "extender" la relación entre las entidades padres e hijas.


    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    domingo, 7 de junio de 2015 22:33
  • Osea según entiendo, me dice que Agenda vendría a ser Entity framework (que es lo que estoy usando). Osea sirve para relaciónar en clases. Osea que si pongo

    public class Agenda
    
    {
    
    public int AgendaId { get ; set ; }
    
    public string Propietario { get ; set ; }
    
    public DateTime FechaCreacion { get ; set ; }
    
    }


    A lo mejor me sale un error en el momento de guardar un evento o momento de borrar una agenda y quiera eliminar conjuntamente automáticamente con el evento?

    Si es así, solo sería referencial el virtual? Osea como poner un

    public class Evento
    
    {
    
    public int EventoId { get ; set ; }
    
    --------------
    
    public int AgendaId{ get ; set ; }  ----> aqui esta el fk de agenda
    
    }


    ---------------------------

    public class Agenda
    { 
    public int AgendaId { get ; set ; }
    public virtual ICollection <Evento> Eventos { get ; set ; } --> vendría
     a ser como el foreing key del evento pero sería para que EF lo entienda?
    }

    Si es así por favor dímelo y así ya lo entendí

    Saludos



    • Editado Ja1000_pu domingo, 7 de junio de 2015 23:09
    domingo, 7 de junio de 2015 23:05
  • hola

    >>para que sirve el virtual icollection <evento>Eventos osea no entiendo que beneficio me daría si puedo hacer con una consulta de linq en entity framework para traer la lista de eventos según el id de la agenda.

    es que justamente, si defines la relacion entre las entidades no tienes que hacer nada en linq para unirlas, es directo

    la definicion de la relacion la define entity framework y tu solo usarias el Include() para traer los eventos de la agenda en caso de necesitarlos

    >>En el post esta un comentario que dice que permite hacer un override pero como lo uso el virtual?

    el virtual no es para que tu lo sobreescribas, sino que lo usa EF para poder hacer lazy load

    >>Pensando yo sobre para que sirve el virtual icollection -> MVC 5 es tan potente que si traigo la agenda me trae automáticamente todos los Eventos asociados a la agenda solicitada por id en la una lista icollection de la clase evento?

    si asi lo defines en la query de linq si, pero no es mvc el potente en esa accion sono que lo es EF

    >>Porque veo que si no uso virtual icollection <> me serviría igual.

    si seguro funcione, pero no se recomienda ya que siempre estara cargando la coleccion lo necesites o no

    Loading Related Entities

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Ja1000_pu domingo, 7 de junio de 2015 23:16
    domingo, 7 de junio de 2015 23:10
  • te recomiendo que veas estos videos

    [Entity Framework] Code First - Manejando Relacion

    [Entity Framework] Code First - Cargando Entidades Relacionadas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    domingo, 7 de junio de 2015 23:12