none
Consulta Linq To SQL em dois .dbml diferentes RRS feed

  • Pergunta

  • Olá galera,
    Estou utilizando varios .dbml para separar as entidades por assunto : Pessoal.dbml, Estrutura.dbml, ...

    Estou tentando fazer uma consulta com Linq to SQL pra pegar todas as pessoas que trabalham em determinado setor, assim :

    Function Shared PessoasPorSetor(ByVal AmbienteSetor As Integer)
    
    Dim estrutura as New EstruturaDataContext()
    Dim pessoal as New PessoalDataContext()
    
    Dim lista = (From p In pessoal.Pessoas _
    
    Join l In pessoal.Lotacaos _ On p.Codigo Equals l.CodigoPessoa _ Join m In estrutura.AmbienteEstruturas _ On l.CodigoEstrutura Equals m.CodigoEstrutura And l.CodigoAmbienteSetor Equals m.CodigoAmbienteSetor _ Where m.AmbienteEstabelecimento.Codigo = AmbienteSetor _ Select p) Return lista.ToList() End Function
    A mensagem de erro que aparece é: "The query contains references to items defined on a different data context.  "
    Na linha 'Dim lista ....'

    Será que não é possivel fazer uma consulta Linq envolvendo dois .dbml (DataContext) diferentes ?
    Existe alguma solução ou gambiarra pra isso ?



    Valeu galera.
    Abraão Alves - Um eterno estudante
    sexta-feira, 15 de janeiro de 2010 21:26

Respostas

  • Boa tarde Abraão.

    Tive esse mesmo problema no passado ao criar um framework orientado a objetos que me dessa a possibilidade de utilizar-me desse objetos para montar rapidamente aplicações de forma dinamica. Pois bem, depois de muito pesquisar, não encontrei nada que pudesse resolver esse problema. A única solução cabivel foi inserir no .dbml "todas" as tabelas que são pertinentes a seu objeto. No meu caso, tenho vários projetos distintos (Clientes, Produtos, Fornecedores) que são auto-suficientes em termos de suas entidades. Porem em várias situações tenho tabelas que são pertinentes a vários projetos como por exemplo a tabela de Pedidos. Possuo essa tabela mapeada tanto no meu datacontext de clientes qto no de produtos pois em ambos possuo rotinas que na exclusão de um cliente ou produto necessito consultar o banco para ver se existem pedidos para o mesmo. Nesse caso, a tabela de Pedidos entra nos dois context´s. Acho que dessa forma acabei entrando em um meio termo. Não possuo todas as tabeas dentro de um só data context mas tbm não deixo de fazer as leituras nas tabelas qdo necessárias.
    Espero que tenha ajudado.

    Abs!
    Paulo Eduardo.
    quinta-feira, 28 de janeiro de 2010 20:45

Todas as Respostas

  • Boa noite Abraão,  bem o dbml deveria ser conter todas as tabelas/entidades da sua base de dados, assim você não teria esse problema, não acredito que separar em arquivos diferentes itens da mesma base de dados seja uma boa idéia ainda sob o pretexto de organização. Espero te-lo ajudado.
    Carlos Adriano Portes - Ajude a tornar o fórum mais organizado, se foi últil marque como resposta.
    sábado, 16 de janeiro de 2010 23:08
  • Olá Carlos,
    Em minha base dados tenho varias/muitas tabelas mesmo!, do modo que se colocar todas as tabelas em um só dbml o modo de design não vai servir pra nada.
    Um outro fator é que estou em um projeto que utiliza essa arquitetura , e o mesmo escontra-se em um estagio bem avançado (existe muita coisa implementada em cima dessa arquitetura )

    Sei que é possivel herança em um DataContext(.dbml), será que de alguma forma eu posso utilizar isso pra resolver esse problema ? Como ?

    Será que não existe nehuma solução mesmo ?
    Se não houver, peço que me comunique pois acho que terei de refatorar muita coisa !!



    Obrigado pela atenção!
    Abraão Alves - Um eterno estudante
    segunda-feira, 18 de janeiro de 2010 00:21
  • Boa tarde Abraão.

    Tive esse mesmo problema no passado ao criar um framework orientado a objetos que me dessa a possibilidade de utilizar-me desse objetos para montar rapidamente aplicações de forma dinamica. Pois bem, depois de muito pesquisar, não encontrei nada que pudesse resolver esse problema. A única solução cabivel foi inserir no .dbml "todas" as tabelas que são pertinentes a seu objeto. No meu caso, tenho vários projetos distintos (Clientes, Produtos, Fornecedores) que são auto-suficientes em termos de suas entidades. Porem em várias situações tenho tabelas que são pertinentes a vários projetos como por exemplo a tabela de Pedidos. Possuo essa tabela mapeada tanto no meu datacontext de clientes qto no de produtos pois em ambos possuo rotinas que na exclusão de um cliente ou produto necessito consultar o banco para ver se existem pedidos para o mesmo. Nesse caso, a tabela de Pedidos entra nos dois context´s. Acho que dessa forma acabei entrando em um meio termo. Não possuo todas as tabeas dentro de um só data context mas tbm não deixo de fazer as leituras nas tabelas qdo necessárias.
    Espero que tenha ajudado.

    Abs!
    Paulo Eduardo.
    quinta-feira, 28 de janeiro de 2010 20:45
  • Boas Abraão,

    sei que a pergunta tem mais de 2 anos, mas estava procurando essa reposta hoje e ainda não tinha encontrado solução no fórum.

    Consegui fazer a separação que você estava tentando, foi até mais simples do que imaginei.

    Bastou ir nas propriedades do arquivo .dbml e adicionar um namespace diferente para cada dbml

    Por padrão ele criou todos no mesmo namespace e como a geração faz classes do tipo partial o problema acaba aparecendo quando compilamos o projeto. Eu deixei cada dbml como um namespace e isso faz com que os objetos sejam diferentes.

    Tudo funcionando agora.

    Espero que isso ainda sirva para ajudar alguém.

    []'s

    Nilton Nakate

    sexta-feira, 24 de agosto de 2012 14:31