2009-08-14 91 views
0

我在努力从一个表格对象中拉出一个简单的记录列表并将它们打印出来。SubSonic 3 + ActiveRecord问题入门

我有一个名为[验收]具有四个字段,其中两个允许空值的表。下面是架构对象的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’”。

我的字段均类型位/布尔的。我只是没有得到它...

可空类型和LINQ查询语法有两个议题,我挣扎......

任何深入了解如何做到这一点正确是极大的赞赏。

感谢,

乔希

回答

1

您正在使用什么数据库?我会猜测MySQL ...你可以进入T4并改变系统类型的定义方式。对于SQLServer.tt的默认模板,使用MySQL和MySQL.tt。只要找出我们设置tinyint的位置 - 这是一个持续的问题(至少在我看来),根据需要返回byte []和bool - set。

+0

Rob,感谢您的信息。我会检查一下。仅供参考,使用MS SQL 2005 – joshblair 2009-08-15 19:53:16

+1

罗布, 我改变了GetSysType方法如下: \t \t案 “TINYINT”: \t \t \t sysType = “INT”; \t \t \t break; 和GetDbType方法如下: case“tinyint”: return DbType.Int16; 并通过我的问题。这看起来像适当的修改? 更新模型我删除ActiveRecord.cs,COntect.cs,StoredProcedures.cs和Structs.cs,然后我排除_Generated文件夹,然后附上_Generated文件夹和模型regeenerated。这是再生模型的最有效方法吗? 再次感谢。亚音速太棒了。 Josh – joshblair 2009-08-17 14:56:40

+1

我刚刚得到了一个修复发送给我今天 - 我会在接下来的2天发布。我早该发布了:)。是的,这听起来很奇怪... – 2009-08-18 05:46:13

1

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

+0

这是一个新的SQL 2005数据库没有时间戳列,但谢谢你的提示。我认为我全部排序,Rob的评论提供了帮助。再次感谢。 – joshblair 2009-08-17 14:52:11

0

我得到这个错误,以及和修复上面没有固定我的问题,而是从GitHub上的最新版本的伎俩。

我希望有发布不久来修复这些枝节问题。