2009-08-14 114 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上的最新版本的伎倆。

我希望有發佈不久來修復這些枝節問題。