none
Como hacer consultas a la base de datos con WCF RIA Services en Silverlight RRS feed

  • Pregunta

  • HOLA, agradezco de ante mano cualquier contribucion.

    El problema es que no puedo obtener un solo registro(o una lista de elementos) de la base de datos (de un tipo especifico ej auto) para luego manipularlo por código sin enlazarlo a un datagrid. que es lo que se muestra en los ejemplos de la red usando el loadOperation.

    en resumen quiero poder obtener un objeto( o una colección de objetos list<auto>) digamos de tipo auto para poder modificarlo y luego guardarl los cambios en la base de datos.

    (No estoy seguro si este es la categoría correspondiente a mi pregunta), gracias a todos los excelentes contribuyentes de este foro.

    • Cambiado jtorrecilla lunes, 3 de octubre de 2011 17:18 (De:ADO.NET General)
    lunes, 3 de octubre de 2011 15:09

Respuestas

  • ¡Hola!
    Sería algo como esto:
    Dentro del void loadOperationAuto_Completed(object senderm EventArgs e)
                    var entitys = ((LoadOperation)sender).Entities.OfType<Autos>();
    
                        foreach (Auto element in entitys.ToList())
                    {
                        
                     }
    

    Con entitys.ToList()) ya tienes una lista.
    Saludos,
    • Marcado como respuesta The_katze_ miércoles, 5 de octubre de 2011 0:27
    lunes, 3 de octubre de 2011 18:03

Todas las respuestas

  • ¡Hola!
    Sería algo como esto:
    Dentro del void loadOperationAuto_Completed(object senderm EventArgs e)
                    var entitys = ((LoadOperation)sender).Entities.OfType<Autos>();
    
                        foreach (Auto element in entitys.ToList())
                    {
                        
                     }
    

    Con entitys.ToList()) ya tienes una lista.
    Saludos,
    • Marcado como respuesta The_katze_ miércoles, 5 de octubre de 2011 0:27
    lunes, 3 de octubre de 2011 18:03
  • Gracias por tu respuesta Corsario Vasco, te comento que cuando estoy tratando de implementar el ejemplo que me proporcionas tengo un problema:

    ***el problema es que no me reconoce .OfType nose si me falta alguna referencia o lo estoy implementando mal es asi como lo estoy usando:

     public auto UnAuto(int id)
     {           
         LoadOperation<auto> loapOp = this.contexto.Load(this.contexto.GetAutoporIDQuery(id));
         loapOp.Completed += new EventHandler(loadOperation_Completed);            
    
    //aquí pretendo regresar un auto
                return null;
     }
    
    void loadOperation_Completed(object sender, EventArgs e)
      {
                  //aqui el error me sale que entities no tiene .OfType
                var entiti = ((LoadOperation)sender).Entities.OfType<
      }
    
    Nuevamente muchas gracias por la respuesta.

    lunes, 3 de octubre de 2011 23:36
  • Hola

    Bueno pues... esto ((LoadOperation)sender).Entities según la MSDN devuelve un IEnumerable y como ya sabemos todo IEnumerable tiene el método extensor OfType.

    Recomendación, primero mira que en realidad Entities te esté devolviendo algún valor y luego si aplica el OfType.

    Otra... LoadOperation<auto> loapOp = this.contexto.Load(this.contexto.GetAutoporIDQuery(id)); no debería devolver solamente una lista del tipo auto?

    Un saludo


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    martes, 4 de octubre de 2011 0:00
  • Saludos antonio gracias por tu tiempo, te comento que sigue sin aparecer el .OfType en entities tengo una duda que tipo de dato tendría que retornar mi Query "GetPreguntaSecretaporID".

    yo lo estoy usando asi:

    public IEnumerable<auto> GetAutoporID(int id)
    {
         var pre = from p in this.ObjectContext.auto
                        where p.id == id
                          select p;
         return pre.OfType<auto>().ToList();
    }
    nueva mente gracias por tu tiempo.

    martes, 4 de octubre de 2011 0:24
  • Hola

    Has despejado mis dudas con eso ultimo... desde un principio tu estas usando un IEnumerable<auto> por ende dentro de loadOperation_Completed no tienes por qué hacer un cast. Sólo es usar var entitys = ((LoadOperation)sender).Entities; para obtener todas las entidades devueltas por GetAutoporID(int id).

    Intenta de esa forma y dinos que tal fue.


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    martes, 4 de octubre de 2011 0:36
  • Hola The katze.

    'OfType' es un metodo extensor de LINQ aplicado al objeto IEnumerable como ha comentado Antonio, de modo que asegurate de que tienes el using System.Linq al inicio para poder usar el metodo extensor de esa forma.

    Tambien puedes hacerlo de la forma clasica System.Linq.Enumerable.OfType<TipoObjeto>(objeto IEnumerable). Aunque no es lo habitual en los metodos extensores.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    martes, 4 de octubre de 2011 7:18
  • Muchas gracias a David Gonzales y Antonio Lobo por sus prontas y utilies respuestas les comento que el error que me salia sigue siendo desconocido para mi.

    ***** Solucion: cree otro proyecto pero esta vez utilice el tipo de proyecto 

    Silverlight Business Aplication (Utilice la plantilla que viene por defecto )

    Y implemente lo que me indicaron + mi propio código y pude obtener los datos

    Gracias a toda la comunidad por su apoyo.

    miércoles, 5 de octubre de 2011 0:35
  • Hola.. espero no abusar de su tiempo pero tengo otra duda

     

    *****Problema:  Despues de Obtener los datos y manipularlos(Altas =, bajas y modificaciones) aplico:

    contexto.SubmitChanges();
    

    no logro refrescar los datos en mi DataGrid mi data grid fue creado por arrastrándolo desde  el "data source"  en la interfaz gráfica.

    luego por código en el evento loadOperati.Completed hago:

    var todo = ((LoadOperation)sender).Entities;
    AutoDataGrid.ItemsSource = todo;
    pero no cambia los datos.

     

    miércoles, 5 de octubre de 2011 0:46
  • Hola

    Intenta primero poniendo null y luego asignando el valor.

    var todo = ((LoadOperation)sender).Entities;
    AutoDataGrid.ItemsSource = null;
    AutoDataGrid.ItemsSource = todo;
    
    Un saludo


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    miércoles, 5 de octubre de 2011 2:05
  • Muchas gracias Antonio Lobo por la respuesta pero cuando implemento el codigo que me proporcionas 

    pasa lo siguiente:

     

    ******1** Adiciono un elmento A y luego actualizo el datagrid se refresca pero no muestra ningún cambio

    ******2** Vuelvo a Adicionar un nuevo elemento B y luego actualizo el datagrid se refresca y sorpresa 

    me muestra el elemento A pero no el B...

    ESe comportamiento a mi parecer no es normal es como si tardara de realizar los cambios en la base de datos

    no me gustaría tener que refrescar 2 veces el grid creo q tiene q haber alguna otra solución no?

    miércoles, 5 de octubre de 2011 4:10
  • ¡Buenos días!

    The katze deberías de abrir otra pregunta porque al marcar la respuesta esta queda cerrada y es muy posible que nadie la vea. Además son preguntas independientes con lo que ayudarías al resto que se pudiera encontrar en tu misma situación.

    ¿Podrías poner un poquito de código?. En principio creo que no haces en tu DomainDataSource un SubmitChanges().

    Saludos,

    miércoles, 5 de octubre de 2011 7:56