SimpleRepository布尔映射问题

时间:2009-07-16 13:36:15

标签: subsonic

我正在使用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?

谢谢!
ç

3 个答案:

答案 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)