2009-04-17 58 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