gpt4 book ai didi

c# - 使用 System.Data.SQLite.Linq 时生成错误的 SQL 语句

转载 作者:行者123 更新时间:2023-11-30 22:14:05 24 4
gpt4 key购买 nike

有人在他们的项目中成功使用过 System.Data.SQLite.Linq 吗?

即使在我的项目引用中包含此 DLL 之后,很明显 Linq 在构建适当的 SQL 语句时调用了错误的提供程序。它使用以下语句在 SQLiteCommand 中抛出异常:

INSERT INTO [Inbox]
([Sender], [Subject], [Body], [Date], [ConversationID], [RemoteID], [ReplyTo])
VALUES
(@p0, @p1, @p2, @p3, @p4, @p5, @p6)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]

SCOPE_IDENTITY 在 SQLite 中无效。如何在构造 SQL 语句时指示 System.Data.SQLite.DLL 使用 SQLite Linq SQL 构建器?

我的 DbProviderFactories 是:

  <DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/>
</DbProviderFactories>

这是正确的吗?

附加信息。当我的应用程序加载时,我在 VS2012 的模块列表中看不到 System.Data.SQLite.Linq.dll,即使它是在 bin 文件夹中。这证实了我的怀疑,即我遗漏了一些明确引用它的东西,但我无法弄清楚它是什么。

谢谢!

最佳答案

根据进一步的研究,似乎:

  1. System.Data.SQLite.Linq.dll 不能被基于 DataContext 的类使用。可以将它与 ObjectContext 一起使用。我正在调查。如果 SQLite.Data 的人能澄清这一点就好了,但我会单独跟进。

  2. DbLinq 是一个替代方案,但当我尝试它时,它对 Blob 数据的处理似乎出了问题。具体来说,它似乎将字典用于 blob 项,并将字典中的每个字节存储为一个值,并将偏移量作为键。那太慢了。此外,当使用大于旧值的新值更新 blob 时,它会崩溃。

  3. Linq2Sql 似乎没有得到维护,由于一些模糊的错误,我根本无法让它工作。可能我的要求有点超出它的能力。

理想情况下 ObjectContext 会起作用。如果做不到这一点,我将放弃 Linq 并改用直接 SQLite 访问。不过,我仍然欢迎任何其他设法让 Linq 与 SQLite 一起工作的人提供见解。我的是一个开源项目,所以我不想使用商业提供商。

关于c# - 使用 System.Data.SQLite.Linq 时生成错误的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18677411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com