2009-04-17 61 views
3

我正在使用MySQL和Postgresql從SVN Trunk測試DBLinq-0.18和DBLinq。我只使用一個非常簡單的查詢,但在兩個數據庫DBLinq不生成一個Where子句。我通過打開Postgresql上的語句記錄來確認這一點,以確認DBLinq發送的是什麼請求。DBLinq沒有生成where子句

我的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; 

查詢工作正常,但通過的DBLinq生成的SQL的形式爲:

select customerusername, customerpassword .... from public.customers 

沒有Where子句這意味着的DBLinq必須拉在運行Linq查詢之前將整個表全部刪除。

有沒有人有DBLinq的經驗,並知道我可能做錯了什麼?

+0

很可能,問題在於如何監視提交的SQL,而不是實際生成的SQL。 – 2009-04-19 14:05:32

+0

我對Postgresql非常熟悉,所以我使用該db來檢查語句。我打開了它的調試日誌記錄,我100%確定DBLinq發送的查詢是一個沒有where子句的select語句。 – sipwiz 2009-04-19 14:37:39

回答

1

我發現這個問題,與DBLinq無關。

我一直在從IronRuby測試一些東西,並且內部有一個叫做Microsoft.Scripting.Core的程序集,它重複了System.Data.Linq命名空間(爲什麼它我不知道)。

通過引用Microsoft.Scripting.Core程序集,我的測試DBLinq應用程序可以編譯並運行正常,但SQL中缺少where子句。刪除程序集引用導致正確地生成where子句。

0

我會避免在生產代碼中使用DBLinq ......許多Linq-to-SQL的功能沒有實現,並且遍歷源代碼顯示了低級別的成熟...許多方法不是實施或標記爲「未終止」。

......你已被警告!

+1

我一直在相當苛刻的生產環境中使用DbLinq大約3個月。我遇到的主要問題是性能。相對而言,每次DbLinq從lambda表達式生成SQL時都會受到很大的衝擊。我用我自己的Linq-to-SQL庫取代它,這是非常基本的。我只需要支持非常簡單的查詢,但我確實需要它快速加上我現在需要使用亞馬遜的SimpleDB,因此我的庫容納Linq-to-SQL和Linq-to-SimpleDB。 – sipwiz 2009-11-05 23:05:52