none
Error: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection. RRS feed

  • Pregunta

  • Saludos comunidad tengo la siguiente duda,

    me sale el mensaje de error de titulo al manejar JQuery-Ajax-Json mandando los datos del cliente al servidor (el mensaje se produce en el servidor).

    Codigo de Servidor

    //Capa de Acceso a Datos
    
            public List<Persons> BuscaEstudiante(string Apellido)
            {
                try
                {
                    using(SchoolEntities db = new SchoolEntities())
                    {
                        var query = db.Persons.Where(x => x.LastName == Apellido);
    
                        return query.ToList();
                    }
                }
    
                catch (Exception ex)
                {
                    error = ex.Message.ToString();
    
                    return new List<Persons>();
                }
            }

    El error se produce en el fail de JQuery, busque por la red y mencionan que tengo que colocar Include en mi Entidad por el lazy loading, aunque no entiendo muy bien ese concepto lo coloque en el metodo de la siguiente forma:

    var query = db.Persons.Include("OfficeAssignment").Include("StudentGrade").Include("Course").Where(x => x.LastName == Apellido);

    Lo hice asi porque en mi clase POCO Persons, esta de la siguiente manera:

    //------------------------------------------------------------------------------
    // <auto-generated>
    //     Este código se generó a partir de una plantilla.
    //
    //     Los cambios manuales en este archivo pueden causar un comportamiento inesperado de la aplicación.
    //     Los cambios manuales en este archivo se sobrescribirán si se regenera el código.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    namespace Entidades
    {
        using System;
        using System.Collections.Generic;
        
        public partial class Persons
        {
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
            public Persons()
            {
                this.StudentGrade = new HashSet<StudentGrade>();
                this.Course = new HashSet<Course>();
            }
        
            public int PersonID { get; set; }
            public string LastName { get; set; }
            public string FirstName { get; set; }
            public Nullable<System.DateTime> HireDate { get; set; }
            public Nullable<System.DateTime> EnrollmentDate { get; set; }
        
            public virtual OfficeAssignment OfficeAssignment { get; set; }
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<StudentGrade> StudentGrade { get; set; }
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<Course> Course { get; set; }
        }
    }
    


    Creo que en el include se coloca las propiedades de navegacion de cada Entidad y por eso sale el mensaje de error, por el lazy loading.

    Colocando Include de la anterior manera de igual forma me sigue saliendo el mensaje de error.

    Otra manera, que encontre es desabilitar este famoso lazy loading:

    public partial class SchoolEntities : DbContext
        {
            public SchoolEntities()
                : base("name=SchoolEntities")
            {
                this.Configuration.LazyLoadingEnabled = false;
            }
        .....
    }

    Pero esta forma desabilita el lazy loading a todas las entidades, me parece muy drastica realizar esta manera, pero de esta manera se soluciona el problema.

    Como puedo desabilitar el lazy loading aolo a las entidades en que las ocupan?

    Gracias por su tiempo

    miércoles, 25 de febrero de 2015 22:51