我在SQLite表中有一个布尔(BOOL)类型字段。 在SubSonic生成的DAL中,它表示为字符串(而不是bool)。 真奇怪。 如何管理?请帮忙。
答案 0 :(得分:4)
我可能错了,我只使用了带有SQL2008的Subsonic 2.2,但我建议查看Subsonic的源代码,即SQLLiteDataProvider.cs
并查看DbType
函数。
似乎识别出类型Boolean
但不识别Bool
,默认情况下,当它无法识别您的类型时,会使用String
。
Hare是该函数的代码
switch(sqliteType.ToLowerInvariant())
{
case "text":
case "char":
case "nchar":
case "varchar":
case "nvarchar":
return DbType.String;
case "boolean":
case "bit":
return DbType.Boolean;
case "bigint":
case "int":
case "integer":
return DbType.Int64;
case "real":
case "numeric":
case "double":
case "single":
case "float":
return DbType.Single;
case "smallint":
return DbType.Int16;
case "date":
case "time":
case "datetime":
case "smalldatetime":
case "timestamp":
return DbType.DateTime;
case "binary":
case "blob":
case "image":
return DbType.Binary;
case "guid":
return DbType.Guid;
default:
return DbType.String;
}
我建议更改它,查看它是否有效,然后推荐更改亚音速章节。
答案 1 :(得分:1)
我在十二月份检查了一个较新版本的提供程序并修复了一些错误,但是从我可以说它没有包含在源代码下载中 - Rob无法使用sqlite因此对他来说不是优先考虑的问题。合并和测试。我建议查看我的版本,因为它为我解决了几个错误。我有一个更新的版本,它几乎通过所有的单元测试,修改为sqlite,但想知道是否值得上传它。由于数据库锁定错误和核心代码中的sql server偏差,很难让测试通过--sqlite具有文件级锁定。单元测试完全没有完全覆盖。
Link to my SQLiteProvider.cs on github
我的版本有一个稍微不同的GetDbType方法,我看到一些脑死亡的原因我没有包含bool或boolean作为转换类型所以我会添加它。