none
DataBinding: 'System.Data.Entity.DynamicProxies' RRS feed

  • Pregunta

  • Hola, me encontré con este problema:

    DataBinding: 'System.Data.Entity.DynamicProxies.Cliente_AE7156ACE459BF948563119A86738C00189070818C6C0017CC26CF3596203E13' no contiene una propiedad con el nombre 'Apellido Nombre'

    Línea 40:                         @Html.LabelFor(model => model.ClienteId, "Dueño")
    Línea 41:                         <div class='input-group'>
    Línea 42:                             @Html.DropDownList("ClienteId", (IEnumerable<SelectListItem>)ViewBag.Clientes, "Seleccione Dueño", new { @class = "form-control" })
    Línea 43:                             <span class="btn btn-success input-group-addon" id="btnCliente">
    Línea 44:                                 <span class="fa fa-plus"></span>

    Alguien sabrá como darle solución?

    Tengo los campos Nombre y Apellido separados, así que para mostrarlo en el combobox, los uní en una nueva propiedad que llame NombreCompleto(Apellido + Nombre), que retorna el valor que quiero mostrar en el combobox. El problema principal es que este error no me salta todo el tiempo, hay ocasiones en las que continúa sin ningún problema y otras en que me sale el error.

    Esta propiedad está mapeada en mi clase del modelo, estoy trabajando con entity framework, así que tiene el atributo notmapped, para que no lo reconozca como un campo de la base de datos.

    Además habrá un modo de hacer esto?

                    cliente = context.Cliente
                        .Where(x => x.NombreCompleto.contains(query)).ToList();

    Al no ser un campo de la base de datos, linq no lo reconoce. Y quiero buscar al cliente por su nombre completo y me liste las coincidencias.


    • Editado Shoy777 jueves, 8 de junio de 2017 12:02
    jueves, 8 de junio de 2017 11:21

Respuestas

  • Hola Shoy777,

    Gracias por visitar los foros comentarte que este thread no ha tenido actividad por un largo tiempo por lo cual procederé a hacer el cierre del mismo.

    Saludos

    Joyce

    __________________________________________________________________________________________
    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, hace que sea más fácil para los otros visitantes encontrar la solución  más tarde. Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal  cual" y no implica ninguna responsabilidad de parte de Microsoft.
    jueves, 22 de junio de 2017 16:15
    Moderador

Todas las respuestas

  • hola

    lo que veo es que no deberias asignar directo el resultado de la query al viewbag porque esta definiendo un proxy

    que pasa si usas

    var clientes  = context.Cliente
                        .Where(x => x.NombreCompleto.contains(query))
                        .Select(x=> new Cliente(){
                              ClienteId = x.ClienteId,
                              Apellido = x.Apellido,
                              Nombre = x.Nombre
                         }).ToList();
    
    
    ViewBag.Clientes = new SelectList(clientes , "ClienteId", "NombreCompleto");


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 8 de junio de 2017 16:51
  • Hola, gracias por la respuesta, pero no me queda muy claro eso de los proxys.

    Este es el método que trae los clientes para el DropDrownList

    public List<Cliente> GetAllClientes()
    {
    	List<Cliente> clientes = new List<Cliente>();
    
    	using (var context = new VeterinariaBDContext())
    	{
    		try
    		{
    			clientes = context.Cliente
    				.OrderBy(x => x.Apellido).ToList();
    		}
    		catch (Exception e)
    		{
    			Message = e.Message;
    		}
    	}
    	return clientes;
    }

    Y este es el campo adicional

    No tengo problemas mostrando este valor, el problema se da cuando quiero capturar el valor para enviarlo a la BD

    [NotMapped]
    public string NombreCompleto { get { return Apellido + " " + Nombre; } }

    Y este el ViewBag que paso al DropDrownList

    /*Problema 1*/

    ViewBag.Clientes = new SelectList(cliente.GetAllClientes(), "ClienteId", "NombreCompleto");
    @Html.DropDownList("ClienteId", (IEnumerable<SelectListItem>)ViewBag.Clientes, "Seleccione Dueño", new { @class = "form-control" })

    Este es otra pregunta pero con el mismo campo que adicional.
    Mediante ajax quiero que me traigan a los clientes de acuerdo al nombre completo

    public JsonResult GetClienteByQuery(string query)
    {
    	VeterinariaBDContext context = new VeterinariaBDContext();
    	
    	List<Cliente> cliente = new List<Cliente>();
    	
    	context.Configuration.ProxyCreationEnabled = false;
    
    		cliente = context.Cliente
    			.Where(x => x.NombreCompleto.Contains(query)).ToList();
    	
    	return Json(cliente);
    }
    • Editado Shoy777 jueves, 8 de junio de 2017 20:57
    jueves, 8 de junio de 2017 20:48
  • Hola Shoy777,

    Gracias por visitar los foros, comentarte que este thread no ha tenido actividad por un largo tiempo,
    por lo cual preguntarte, ¿Haz podido resolver tu consulta?, de ser así sería de
    gran ayuda para futuros usuarios pudieras compartirnos tu solución.

    Saludos
    Joyce

    __________________________________________________________________________________________
    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, hace que sea más fácil para los otros visitantes encontrar la solución  más tarde. Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal  cual" y no implica ninguna responsabilidad de parte de Microsoft.

    lunes, 19 de junio de 2017 22:21
    Moderador
  • Hola Shoy777,

    Gracias por visitar los foros comentarte que este thread no ha tenido actividad por un largo tiempo por lo cual procederé a hacer el cierre del mismo.

    Saludos

    Joyce

    __________________________________________________________________________________________
    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, hace que sea más fácil para los otros visitantes encontrar la solución  más tarde. Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal  cual" y no implica ninguna responsabilidad de parte de Microsoft.
    jueves, 22 de junio de 2017 16:15
    Moderador