Subsonic 单正布尔映射问题

Subsonic 单正布尔映射问题,subsonic,Subsonic,我正在使用亚音速(v3.0.0.3)将SimpleRepository进行简单的对象映射到SQLite。使用类型为string、DateTime、Guid和int的属性时,一切正常。当我尝试向对象添加bool(或Boolean)属性时,我可以将其添加到数据库中,但当我尝试检索它时,会收到以下错误消息: “无法将'System.Byte'类型的对象转换为'System.Boolean'类型。” 我尝试了几种不同的方法检索数据。以下是一些示例(当所讨论的对象没有任何布尔属性时,这些示例有效): va

我正在使用亚音速(v3.0.0.3)将SimpleRepository进行简单的对象映射到SQLite。使用类型为string、DateTime、Guid和int的属性时,一切正常。当我尝试向对象添加bool(或Boolean)属性时,我可以将其添加到数据库中,但当我尝试检索它时,会收到以下错误消息:

“无法将'System.Byte'类型的对象转换为'System.Boolean'类型。”

我尝试了几种不同的方法检索数据。以下是一些示例(当所讨论的对象没有任何布尔属性时,这些示例有效):

var myObjs=repo.All();

var myObjs=来自回购协议中的m.All()
orderby m.Title
选择m;
我不确定这是一个bug,还是我做错了什么。其他人是否能够使用SimpleRepository将此数据类型映射到SQLite

谢谢

C

为我自己修复了这个问题,不确定它是否是亚音速的bug,但深入源代码找到了修复方法

从github获取亚音速源并打开

亚音速-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";
public重写字符串GetNativeType(DbType-DbType)
{
开关(dbType)
{
case DbType.Object:
案例DbType.AnsiString:
案例DbType.AnsiStringFixedLength:
大小写DbType.String:
案例DbType.StringFixedLength:
返回“nvarchar”;
case DbType.Boolean:

return“boolean”//为我自己修复了这个问题,不确定它是否是亚音速的bug,但深入源代码以找到修复方法

从github获取亚音速源并打开

亚音速-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";
public重写字符串GetNativeType(DbType-DbType)
{
开关(dbType)
{
case DbType.Object:
案例DbType.AnsiString:
案例DbType.AnsiStringFixedLength:
大小写DbType.String:
案例DbType.StringFixedLength:
返回“nvarchar”;
case DbType.Boolean:

return“boolean”//我也遇到了这个问题&发现了这个问题

在SQLite.ttinclude的GetDbType()函数中,没有定义布尔值

把这个加到开关上就行了

大小写“boolean”:返回DbType.boolean


它应该还能工作;D

我也有这个问题&找到了问题所在

在SQLite.ttinclude的GetDbType()函数中,没有定义布尔值

把这个加到开关上就行了

大小写“boolean”:返回DbType.boolean


它应该还能工作;D

这是MySQL的错误报告:和相关提交:

这是MySQL的错误报告:和相关提交:

同样的问题。当您禁用迁移并手动将字段类型转换为布尔值时,迁移会将布尔值映射为sqlite类型“tinyint”:您会得到一个参数异常“类型为'System.Int64'的对象无法转换为类型'System.Int32'。”哇,这实际上是另一个问题。.当SQLite需要“long”相同问题时,我的类中的ID字段是int。迁移将布尔映射为SQLite类型“tinyint”,当您禁用迁移并手动将字段类型转换为布尔值时:您会得到一个参数异常“类型为'System.Int64'的对象无法转换为'System.Int32'类型”。哎呀,这实际上是另一个问题。.当SQLite需要“long”时,我的类中的ID字段是int这确实解决了问题。看了代码后,我猜这是一个官方错误,所以我想我会继续提交它。GitHub中的源代码似乎是v3.0.0.2,所以我希望将其合并到最新版本中。谢谢!!很高兴我能帮上忙,鉴于这解决了您的专业问题,请勾选方框问题?:)对不起,第一次在这个网站上发布。再次感谢!这是一个错误-如果你有时间,请创建一个问题-我将不胜感激!Christian在这里记录了它。谢谢。这确实解决了问题。在看了代码后,我猜这是一个官方错误,所以我想我会继续提交它。它看起来像是中的源代码GitHub是v3.0.0.2,因此我希望将其整合到最新版本中。谢谢!!很高兴我能提供帮助,鉴于这解决了您的问题,请您勾选方框好吗?:)对不起,第一次在这个网站上发布。再次感谢!这是一个bug-如果您有时间,请创建一个问题-我将不胜感激!Christian将其记录在这里。比ks。
   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";