none
Persistência WCF + Linq + Silverlight RRS feed

  • Pergunta

  • Olá Pessoal, estou utilizando linq para acessar meu banco de dados fazer pesquisas. Até aí td bem.
    Mas está muito difícil encontrar um material que me ensine como eu posso alterar, gravar e apagar dados
    com esta arquitetura.

    Pessoal!

    Se puderem me mostrar algum artigo, ou documentação. Vi alguém fazendo isto com hibernate, mas gostaria de fazer
    na estrutura acima com wcf e linq, se possível sem hibernate.

    Pessola, ainda sou novato no assunto, se falei algo errado me desculpem, mas acho q entenderam minha necessidade!
    WSS - Anaslita de Sistemas
    quarta-feira, 5 de agosto de 2009 16:27

Respostas

  • Boas Giovanni,

    Pela stack trace, o problema está no LINQ que está utilizando para recuperar os dados da DB.

    Já tentou executar essa mesma query diretamente em uma outra aplicação, para ver se o resultado é devolvido?
    http://www.israelaece.com
    segunda-feira, 4 de janeiro de 2010 09:44
    Moderador
  • Olá Israel, aparentemente consegui resolver a questão. Estava com problemas com a instalação do ambiente. Verifiquei no GAC do servidor e vi que faltavam alguns assemblies do SqlServer (como a Microsoft.SqlServer.Dmo.dll), dentre outras. Instalei alguns patches do SQL 2008, reinstalei o serviço WCF e agora está tudo funcionando. Farei mais testes para verificar se o problema foi realmente solucionado.

    Obrigado pelo apoio!
    segunda-feira, 4 de janeiro de 2010 19:57

Todas as Respostas

  • Boas Oriun,

    Mas a sua dificuldade é em fazer CRUD com LINQ To SQL ou expor as classes via WCF? Se o problema é a exposição das informações via WCF, isso já é um problema conhecido, já que muitas vezes o DataContext "morre" e não consegue efetuar o tracking das mudanças.

    Veja se é isso que procura:
    http://www.sidarok.com/web/blog/content/2008/05/26/linq-to-sql-with-wcf-in-a-multi-tiered-action-part-1.html
    http://www.sidarok.com/web/blog/content/2008/06/02/linq-to-sql-with-wcf-in-a-multi-tiered-action-part-2.html


    http://www.israelaece.com
    quarta-feira, 5 de agosto de 2009 17:25
    Moderador
  • Olá Israel, obrigado por responder, já estou lendo os links relacionados!

    Veja eu criei uma aplicação que se conecta ao meu banco sql server 2005 via linq server explorer,
    em seguida criei um serviço que expõe este método e depois criei o silverlight para mostrar os dados em um datagrid.
    Td funcionou bem, porém não tenho idéia de como criar a opção para o usuário alterar,salvar, inserir e deletar.

    Confesso estou bem perdido em todo este processo, pois tenho q aprender linq, silverligth e serviços, para um inciante é bastante, mas acredito que não é impossível, a parte de cima, fiz com base em um artigo e achei bem prática:
    http://www.c-sharpcorner.com/UploadFile/raj1979/DatabaseConnectivity07292008105357AM/DatabaseConnectivity.aspx

    agora preciso dar sequência, e é difícil saber para onde ir, estarei lendo os links relacionados e se vc tiver algo a mais para um inciante agradeço.

    A minha idéia incial, é conseguir acessar minhas tabelas do banco e dar opção para o usuário de gerenciá-la, alterando inserindo e deletando.

    Obrigado!





    WSS - Anaslita de Sistemas
    quarta-feira, 5 de agosto de 2009 17:37
  • Boa tarde Israel, estou aproveitando essa thread para tentar resolver um problema que estou enfrentando quando utilizo o LINQ e o WCF em conjunto. Bom, o problema é o seguinte: eu tenho uma camada que faz acesso aos dados, nela utilizo o LINQ. Para fazer a comunicação entre a camada de acesso de dados e a camada de apresentação da aplicação eu utilizo WCF.

    Tudo funcionava perfeitamente até que resolvi colocar o serviço WCF em outro servidor para fazer testes de comunicação entre as camadas quando elas estão em máquinas diferentes. A partir do momento em que o serviço passou a rodar em outro servidor começaram a aparecer erros de referência a objetos nulos (Object reference not set to an instance of an object) justamente quando eram acessados objetos do LINQ. Creio que esses erros estejam relacionados exatamente à "morte" do DataContext do LINQ, como você disse. Vejo que este post já possui algum tempo. Gostaria de saber se há alguma solução rápida para o problema.

    Desde já agradeço.
    segunda-feira, 28 de dezembro de 2009 20:42
  • Boas Giovanni,

    Mas exatamente em que momento você recebe essa exceção?
    http://www.israelaece.com
    terça-feira, 29 de dezembro de 2009 09:43
    Moderador
  • Bom dia Israel, obrigado pela resposta.

    O problema é estranho pois acontece sem qualquer tipo de padrão. Por exemplo: eu tenho várias telas onde há grids em que eu faço consultas com queries LINQ na camada acesso aos dados. Essas consultas retornam Lists. Às vezes consigo executar as consultas, às vezes não. Quando consigo executar alguma consulta, se saio da tela e disparo a mesma consulta novamente acontece o erro. Ou seja não consegui rastrear exatamente quando e porque o erro acontece. Lembro que esse erro não ocorre quando eu rodo o serviço WCF no mesmo computador onde está a camada de apresentação.

    Abaixo está o “detail” da Exception:

    {ExceptionDetail, provavelmente criado por IncludeExceptionDetailInFaults=true, cujo valor é:
    System.NullReferenceException: Object reference not set to an instance of an object.
       at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
       at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
       at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
       at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
       at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
       at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
       at DAO.BuscaPor_GRP_ID(List`1 listGRP_ID)
       at BRL.BuscaPor_GRP_ID(List`1 listGRP_ID)
       at WCFServiceHost.Service.BuscaPor_GRP_ID(List`1 listGRP_ID)
       at SyncInvokeBuscaPor_GRP_ID(Object , Object[] , Object[] )
       at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
       at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)}
    terça-feira, 29 de dezembro de 2009 11:51
  • Boas Giovanni,

    Pela stack trace, o problema está no LINQ que está utilizando para recuperar os dados da DB.

    Já tentou executar essa mesma query diretamente em uma outra aplicação, para ver se o resultado é devolvido?
    http://www.israelaece.com
    segunda-feira, 4 de janeiro de 2010 09:44
    Moderador
  • Olá Israel, aparentemente consegui resolver a questão. Estava com problemas com a instalação do ambiente. Verifiquei no GAC do servidor e vi que faltavam alguns assemblies do SqlServer (como a Microsoft.SqlServer.Dmo.dll), dentre outras. Instalei alguns patches do SQL 2008, reinstalei o serviço WCF e agora está tudo funcionando. Farei mais testes para verificar se o problema foi realmente solucionado.

    Obrigado pelo apoio!
    segunda-feira, 4 de janeiro de 2010 19:57