DbLinq não gerando onde cláusula
-
09-09-2019 - |
Pergunta
Eu estou testando DbLinq-0,18 e DbLinq de Tronco SVN com MySQL e PostgreSQL. Eu só estou usando uma consulta muito simples, mas em ambos os banco de dados DbLinq não está gerando uma cláusula WHERE. Eu confirmei isso transformando o registo de declaração sobre PostgreSQL para verificar exatamente o que solicitar DbLinq está enviando.
query Meu Linq é:
MyDB db = new MyDB(new NpgsqlConnection("Database=database;Host=localhost;User Id=postgres;Password=password"));
var customers = from customer in db.Customers
where customer.CustomerUserName == "test"
select customer;
A consulta funciona ok, mas o SQL gerado pelo DbLinq é da forma:
select customerusername, customerpassword .... from public.customers
Não existe cláusula Where que significa DbLinq deve estar puxando a tabela inteira para baixo antes de executar a consulta Linq.
Alguém já teve alguma experiência com DbLinq e saber o que eu poderia estar fazendo de errado?
Solução
Eu encontrei o problema e não tem nada a ver com DbLinq.
Eu tinha vindo a testar algumas coisas fora do IronRuby e dentro de que há uma reunião convocada Microsoft.Scripting.Core que duplica o namespace System.Data.Linq (por que é que isso eu não sei).
Com uma referência ao Microsoft.Scripting.Core montagem meu teste de aplicativo DbLinq seria compilar e multa prazo, mas teria o onde cláusula em falta no SQL. Removendo o conjunto de referência resultou na cláusula onde correctamente a ser gerado.
Outras dicas
eu evitaria usar DbLinq para código de produção ... muitos dos recursos do LINQ to SQL não são implementadas, e caminhar através da mostra de código fonte de um baixo nível de maturidade ... muitos dos métodos não são implementados ou marcado como "não terminada".
... você foi avisado!