Activerecord 亚音速3+;活动记录

Activerecord 亚音速3+;活动记录,activerecord,subsonic,subsonic3,Activerecord,Subsonic,Subsonic3,我正在努力从一个表对象中提取一个简单的记录列表并打印出来 我有一个名为[Acceptance]的表,它有四个字段,其中两个允许空值。以下是架构对象的ddl: CREATE TABLE [dbo].[Acceptance]( [AcceptanceID] [int] IDENTITY(1,1) NOT NULL, [AcceptanceCode] [nvarchar](2) NOT NULL, [AcceptanceDesc] [varchar](25) NOT NULL,

我正在努力从一个表对象中提取一个简单的记录列表并打印出来

我有一个名为[Acceptance]的表,它有四个字段,其中两个允许空值。以下是架构对象的ddl:

CREATE TABLE [dbo].[Acceptance](
    [AcceptanceID] [int] IDENTITY(1,1) NOT NULL,
    [AcceptanceCode] [nvarchar](2) NOT NULL,
    [AcceptanceDesc] [varchar](25) NOT NULL,
    [SortOrder] [tinyint] NOT NULL,
 CONSTRAINT [PK_Acceptance] PRIMARY KEY CLUSTERED 
(
    [AcceptanceID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
当我尝试使用以下代码将单个记录的单个字段呈现到控制台时:

var a = Acceptance.All();
            Console.WriteLine(a.First().AcceptanceID);
            Console.Read();
我得到以下例外情况:

System.ArgumentException未经处理消息=“类型为'System.Byte'的对象无法转换为类型为'System.Boolean'

我的所有字段都不是Bit/Boolean类型。我只是不明白

可空类型和Linq查询语法是我正在努力解决的两个主题

非常感谢您对如何正确执行此操作的任何见解

谢谢


Josh

您使用的数据库是什么?我猜MySQL。。。您可以进入T4s并更改系统类型的定义方式。默认模板为SQLServer.tt,MySQL为MySQL.tt。只需查看tinyint的设置位置—根据需要返回byte[]vs bool-set是一个持续存在的问题(至少对我而言)。

您是否有可能使用SQL Server Migration Assistant 2005进行访问?默认情况下,迁移向导会将时间戳列添加到所有数据类型为“timestamp”的表中。我记得,此字段导致的异常与使用SubSonic 3时报告的异常类似(如果不相同)。您可以通过“工具”>“默认项目设置”>“添加时间戳列”>“从不”禁用时间戳列的创建。

我也遇到了这个错误,上面的修复程序并没有修复我的问题,但GitHub的最新版本解决了这个问题


我希望很快会有一个版本来解决所有这些问题。

Rob,谢谢你提供的信息。我去看看。仅供参考,使用MS SQL 2005.Rob,我修改了GetSysType方法如下:case“tinyint”:sysType=“int”;打破GetDbType方法如下:case“tinyint”:返回DbType.Int16;我的问题解决了。这看起来像是适当的修改吗?要更新模型,我删除ActiveRecord.cs、COntect.cs、StoredProcedures.cs和Structs.cs,然后排除生成的文件夹,然后包括生成的文件夹,然后重新生成模型。这是重新生成模型的最有效方法吗?再次感谢。亚音速是惊人的。JoshI今天刚收到一个补丁,我会在接下来的两天内发布。我早该发布了:)。是啊,听起来很奇怪……这是一个新的SQL 2005数据库,没有时间戳列,但谢谢你的提示。我想我已经整理好了,罗布上面的评论帮了我的忙。再次感谢。