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