我正在使用SubSonic(v3.0.0.3)与SimpleRepository进行简单的对象映射到SQLite。使用类型字符串,DateTime,Guid和int的属性,一切正常。当我尝试向对象添加bool(或Boolean)属性时,我可以将它添加到数据库中,但是当我尝试检索它时,我收到以下错误消息:
“System.Byte'类型的对象无法转换为'System.Boolean'类型。”
我尝试过几种不同的方式检索数据。以下是一些示例(当有问题的对象没有任何bool属性时可以使用):
var myObjs = repo.All<MyObj>();
OR
var myObjs = from m in repo.All<MyObj>()
orderby m.Title
select m;
我不确定这是一个错误,还是我做错了什么。是否有其他人能够使用SimpleRepository将此数据类型映射到SQLite?
谢谢!
ç
答案 0 :(得分:5)
为我自己解决了这个问题,不确定它是否是亚音速的错误但是在挖掘源中找到修复。
从github抓取亚音速源并打开
<强>亚音速-3.0 \ SubSonic.Core \ SQLGeneration \架构\ 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;)
答案 1 :(得分:0)
我也有这个问题&amp;发现了这个问题。
它在GetDbType()函数的SQLite.ttinclude中,没有定义布尔值。
只需将其添加到开关
中case“boolean”:return DbType.Boolean;
它应该再次起作用; D
答案 2 :(得分:0)