我在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
OR
我通过某个客户端应用程序的服务引用查询服务(我的查询包含Count()
),我得到一个例外
System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---&GT; System.Data.EntityCommandExecutionException:执行命令定义时发生错误。有关详细信息,请参阅内部异常---&GT; System.Data.SQLite.SQLiteException:SQL逻辑错误或缺少数据库
没有这样的功能:BigCount
我认为在生成SQL请求时,它包含SQLite没有的聚合函数BIGCOUNT。如果我将我的数据库提供程序更改为SQL Server,那么一切都很好。我不知道如何改变请求的生成方式。我试图切换到Entity Framework 6 + System.Data.SQLite 1.0.94.0但它没用。我试图坚持EF5并将System.Data.SQLite的版本更改为以前的版本,但没有任何改变。我唯一的区别是当我使用EF6 + SQLITE1.0.94.0时,我的earlier problem被“解决了”(在引号中因为我不会称之为我不理解的解决方案)。
更新2014年12月23日
我们通过检查System.Data.SQLite源,找到“bigcount”关键字被错误使用的位置,根据我们的需要修复它,然后重建库来解决这个问题。
如前所述,here BigCount应该在除SQL Server之外的所有数据库中编译为COUNT()。看起来BigCount只是编译为BigCount,或者像那样。
重建图书馆本身就变得很棘手了,因为我还只是一个小小的,所以我的团队负责人做了那个部分,我不知道细节,我没有时间深入研究至少,这是你可以用来解决同样问题的方向。
答案 0 :(得分:1)
我还遇到了错误SQL logic error or missing database\r\nno such function: BigCount
,这里是我用来更新代码以解决Windows操作系统问题的详细分步说明:
下载fossil并将fossil.exe解压缩到您的<working>
目录
打开正常的命令提示符
运行cd <working>
运行fossil clone https://system.data.sqlite.org/ sds.fossil
运行fossil open sds.fossil
运行fossil update <release-tag>
例如,fossil update release-1.0.105.2
更新.\System.Data.SQLite.Linq\SQL Generation\SqlGenerator.cs
:
一个。不引用评论的话 - 1978 - 1983年
湾用以下行替换1982行:
aggregateResult.Append("COUNT");
运行cd Setup
运行set_YYYY.bat
例如,要构建net451二进制文件,请运行set_2013.bat
运行build.bat ReleaseManagedOnly
从ASP.NET Web项目中删除对System.Data.SQLite.Linq
和System.Data.SQLite.EF6
的引用
在ASP.NET Web项目的System.Data.SQLite.Linq.dll
中添加对新System.Data.SQLite.EF6.dll
和<working>\bin\2013\Release\bin
的引用
来源:
System.Data.SQLite Source Code
System.Data.SQLite Build Procedures
System.Data.SQLite Ticket UUID 76c2eaadc0297696b2c5fb10d41a22325f56f9b9