不正确的字段类型映射SubSonic 2.2,SQLite 3

时间:2010-03-05 12:57:28

标签: sqlite subsonic mapping

我在SQLite表中有一个布尔(BOOL)类型字段。 在SubSonic生成的DAL中,它表示为字符串(而不是bool)。 真奇怪。 如何管理?请帮忙。

alt text http://dl.dropbox.com/u/3882061/sqlite.GIF

2 个答案:

答案 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作为转换类型所以我会添加它。