我使用SubSonic (v3.0.0.3)从SimpleRepository到SQLite进行简单的对象映射。对于string、DateTime、Guid和int类型的属性,一切都可以正常工作。当我试图向对象添加一个bool (或Boolean)属性时,我可以将它添加到数据库中,但是当我试图检索它时,我得到了以下错误消息:
“无法将'System.Byte‘类型的对象转换为’System.Boolean‘类型。”
我已经尝试了几种不同的方法来检索数据。以下是一些示例(当有问题的对象没有任何bool属性时,它们会起作用):
var myObjs = repo.All<MyObj>();或
var myObjs = from m in repo.All<MyObj>()
orderby m.Title
select m;我不确定这是一个bug,还是我做错了什么。其他人可以使用SimpleRepository将此数据类型映射到SQLite吗?
谢谢!
C
发布于 2009-07-16 20:28:40
为我自己修复了这个,不确定它是否是亚音速的bug,但深入到源代码中寻找修复。
从github抓取亚音速信号源并打开
SubSonic-3.0\SubSonic.Core\SQLGeneration\Schema\SQLiteSchema.cs
public override string GetNativeType(DbType dbType)
{
switch(dbType)
{
case DbType.Object:
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
case DbType.String:
case DbType.StringFixedLength:
return "nvarchar";
case DbType.Boolean:
return "boolean"; // <-- This was set to "tinyint"
case DbType.SByte:
case DbType.Binary:
case DbType.Byte:
return "longblob";
case DbType.Currency:
return "money";..。
注意我已经注释过的地方,Subsonic现在将.net DbType映射到SqlLite类型"boolean“而不是"tinyint”。在发布模式下重新构建并获取新的SubSonic.Core.dll并替换它。
如果你不熟悉git,我可以通过cygwin添加一些关于快速克隆的说明。如果你没有时间,我可以给你我现在正在使用的dll,但是这是一个简单的改变,最好是自己改变它,而不是从未知的地方获取一个编译的dll ;)
发布于 2009-08-19 06:27:02
我也遇到了这个问题&找到了问题所在。
在GetDbType()函数的SQLite.ttinclude中,没有定义布尔值。
只需将此代码添加到交换机中即可
case "boolean":返回DbType.Boolean;
它应该会再次工作;D
发布于 2009-08-22 16:26:52
以下是MySQL:MySQL TINYINT(1) boolean conversion fails和相关的commit:fixed situation where TreatTinyAsBoolean had no effect with default database character set to UTF8.的错误报告
https://stackoverflow.com/questions/1137649
复制相似问题