Var*_*ina 7 c# sqlite wcf entity-framework odata
我在SQLite数据库上使用EF5(使用System.Data.SQLite 1.0.90.0).实体通过OData服务公开
public sealed class MyService : DataService<MyEntities>
Run Code Online (Sandbox Code Playgroud)
当我从我的应用程序内部查询我的实体时,它可以正常工作,例如
using (var ents = new MyEntities)
{
var count = ents.SomeEntity.Select(ent => ent).Count();
}
Run Code Online (Sandbox Code Playgroud)
当我从这样的浏览器发送请求时
http://localhost:8737/MyService/SomeEntity
Run Code Online (Sandbox Code Playgroud)
它也工作正常,它返回我的实体列表.
但是当我创建以下请求时
http://localhost:8737/MyService/SomeEntity/$count
Run Code Online (Sandbox Code Playgroud)
要么
我通过一些客户端应用程序的服务引用查询服务(我的查询包含Count()
),我得到一个例外
System.Reflection.TargetInvocationException:调用目标抛出了异常.---> System.Data.EntityCommandExecutionException:执行命令定义时发生错误.有关详细信息,请参阅内部异常 ---> 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时,我早期的问题是"解决"(引用因为我不会称之为我不理解的解决方案).
更新23/12/2014
我们通过检查System.Data.SQLite源,找到错误使用"bigcount"关键字的位置,根据我们的需要修复它,然后重建库来解决了这个问题.
如前所述这里的BigCount应该被编译为COUNT()除了SQL Server的所有数据库.看起来BigCount只是编译为BigCount,或者像那样.
重建图书馆本身变得很棘手,因为我只是一个小小的,所以我的团队负责人做了那部分,我不能告诉细节,我没有时间深入研究.至少,这是你可以用来解决同样问题的方向.
我也遇到了该错误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
b. 将 1982 行替换为以下行:
aggregateResult.Append("COUNT");
跑步cd Setup
跑步set_YYYY.bat
例如,要构建 net451 二进制文件,请运行set_2013.bat
跑步build.bat ReleaseManagedOnly
删除对ASP.NET Web 项目的引用System.Data.SQLite.Linq
以及从 ASP.NET Web 项目中删除引用System.Data.SQLite.EF6
在 ASP.NET Web 项目中添加对 newSystem.Data.SQLite.Linq.dll
和System.Data.SQLite.EF6.dll
from的引用<working>\bin\2013\Release\bin
资料来源:
System.Data.SQLite 源代码
System.Data.SQLite 构建过程
System.Data.SQLite 票证 UUID 76c2eaadc0297696b2c5fb10d41a22325f56f9b9