【问题标题】:DBLinq not generating where clauseDBLinq 不生成 where 子句
【发布时间】:2009-04-17 14:42:07
【问题描述】:

我正在使用 MySQL 和 Postgresql 测试来自 SVN Trunk 的 DBLinq-0.18 和 DBLinq。我只使用了一个非常简单的查询,但在两个数据库上 DBLinq 都没有生成 Where 子句。我已经通过在 Postgresql 上打开语句日志记录来确认 DBLinq 正在发送的确切请求。

我的 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 的经验并且知道我可能做错了什么?

【问题讨论】:

  • 可能问题在于您如何监控提交的 SQL,而不是实际生成的 SQL。
  • 我对 Postgresql 相当熟悉,所以我使用那个 db 来检查语句。我已经为它打开了调试日志,我 100% 确定 DBLinq 发送的查询是一个没有 where 子句的 select 语句。

标签: linq-to-sql dblinq


【解决方案1】:

我发现了问题,与 DBLinq 无关。

我一直在测试 IronRuby 中的一些东西,其中有一个名为 Microsoft.Scripting.Core 的程序集,它复制了 System.Data.Linq 命名空间(我不知道它为什么这样做)。

通过引用 Microsoft.Scripting.Core 程序集,我的测试 DBLinq 应用程序可以正常编译和运行,但 SQL 中缺少 where 子句。删除程序集引用会导致正确生成 where 子句。

【讨论】:

    【解决方案2】:

    我会避免将 DBLinq 用于生产代码...许多 Linq-To-SQL 的功能没有实现,浏览源代码显示成熟度较低...许多方法没有实现或标记为“未终止”。

    ...您已被警告!

    【讨论】:

    • 我已经在相当苛刻的生产环境中使用 DbLinq 大约 3 个月了。我遇到的主要问题是性能。相对而言,每次 DbLinq 从 lambda 表达式生成 SQL 时,它都会大受欢迎。我用我自己的 Linq-to-SQL 库替换它,这个库非常基础。我只需要支持非常简单的查询,但我确实需要它的速度,而且我现在需要使用 Amazon 的 SimpleDB,因此我的库可以容纳 Linq-to-SQL 和 Linq-to-SimpleDB。
    猜你喜欢
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多