SQLite 异常:“没有这样的函数:BigCount”,当使用“count”调用 OData 服务与 EntityFr

本文关键字:count 调用 服务 EntityFr OData BigCount 异常 SQLite 函数 | 更新日期: 2023-09-27 18:32:28

我在SQLite数据库上使用EF5(使用System.Data.SQLite 1.0.90.0(。实体通过 OData 服务公开

public sealed class MyService : DataService<MyEntities>

当我从应用程序内部查询我的实体时,它可以正常工作,例如

using (var ents = new MyEntities) 
{
    var count = ents.SomeEntity.Select(ent => ent).Count();
}

当我从这样的浏览器发送请求时

http://localhost:8737/MyService/SomeEntity

也可以正常工作,它向我返回我的实体列表。

但是当我创建以下请求时

http://localhost:8737/MyService/SomeEntity/$count

我从某个客户端应用程序通过服务引用查询服务(我的查询包含Count()(,我得到一个异常

System.Reflection.TargetInvocationException:调用的目标引发了异常。 ---> System.Data.EntityCommandExecutionException:执行命令定义时出错。有关详细信息,请参阅内部异常。---> System.Data.SQLite.SQLiteException:SQL 逻辑错误或缺少数据库
没有这样的功能:BigCount

我想当SQL请求生成时,它包含SQLite没有的聚合函数BIGCOUNT。如果我将我的数据库提供程序更改为 SQL Server,那么一切都很好。我不知道我能做些什么来改变请求的生成方式。我试图切换到实体框架 6 + System.Data.SQLite 1.0.94.0,但没有用。我试图坚持使用EF5并将System.Data.SQLite的版本更改为以前的版本,但没有任何变化。我唯一的区别是,当我使用 EF6+SQLITE1.0.94.0 时,我之前的问题被"解决了"(用引号引起来,因为我不会称我不明白的东西为解决方案(。

更新 23/12/2014

我们通过检查System.Data.SQLite源代码来解决这个问题,找到错误使用"bigcount"关键字的位置,根据我们的需求修复它,然后重建库。

如此处所述,BigCount 应该在除 SQL Server 之外的所有数据库中编译为 COUNT((。看起来BigCount只是为了BigCount编译的,或者类似的东西。

重建图书馆本身就很棘手,而且由于我还只是一名大三学生,所以我的团队负责人做了那部分,我无法说出细节,我没有时间深入研究。至少,这是一个可以用来解决相同问题的方向。

SQLite 异常:“没有这样的函数:BigCount”,当使用“count”调用 OData 服务与 EntityFr

我也遇到了错误SQL logic error or missing database'r'nno such function: BigCount以下是我用来更新代码以解决 Windows 操作系统上问题的详细分步说明:

    下载化石
  1. 和提取化石.exe到您的<working>目录

  2. 打开普通命令提示符

  3. 运行cd <working>

  4. 运行fossil clone https://system.data.sqlite.org/ sds.fossil

  5. 运行fossil open sds.fossil

  6. 运行fossil update <release-tag>

    例如,fossil update release-1.0.105.2

  7. 更新.'System.Data.SQLite.Linq'SQL Generation'SqlGenerator.cs
    A. 1978-1983
    年联合国评论行b. 将第1982行改为:

    aggregateResult.Append("COUNT");

  8. 运行cd Setup

  9. 运行set_YYYY.bat

    例如,若要生成 net451 二进制文件,请运行set_2013.bat

  10. 运行build.bat ReleaseManagedOnly

  11. 从 Web 项目中删除对System.Data.SQLite.LinqSystem.Data.SQLite.EF6的引用 ASP.NET

  12. 在 ASP.NET Web 项目中添加对新System.Data.SQLite.Linq.dll的引用,并从<working>'bin'2013'Release'bin System.Data.SQLite.EF6.dll

来源:

System.Data.SQLite 源代码
System.Data.SQLite 构建过程
System.Data.SQLite Ticket UUID 76c2eaadc0297696b2c5fb10d41a22325f56f9b9