初探SQL Server CE + Codesmith用法

iSQlServer發表於2009-08-11

硬碟壞了也是一種契機,我突然想到了SQL Server還有一個CE版本,現在不止提供For Mobile的,還提供桌面版.這種可愛的嵌入式資料庫可比沒意思的Access好得多了. 這東西雖然沒store function(其實有ORM基本沒必要用),但是索引啊,表關係啊還是很全面的.微軟的東西就是好,造福全懶人嘛..

然而我的資料庫原來是Access的,在網上找了半天工具只找到一個SQL To SQL Ce的工具.於是用Access的升遷嚮導升遷到MS SQL,然後在MS SQL Server裡面建立表關係.然後用那個工具匯入到SQL CE裡面. 然後又自己編譯了一個Codesmith的資料庫Schema provider(因為以前這個是for 4.0的,而我的是5.0).

那個遷移工具貌似有點問題,沒有把表關係完全copy過去,自己的SQL Menagement Studio版本可能太低,不能開啟3.5的CE資料庫.結果用Codesmith就沒法生成我要的關係.不爽.想到NHibernate其實對於表關係是不依賴於資料庫的,只要有表就可以了,所以想到一個特別二的方法,就是用MS SQL做Codesmith的資料來源,生成檔案,而程式中則使用遷移後的CE資料庫.(其實感覺直接用MS SQL Server也可以,最後釋出的時候換CE)

不過最鬱悶的事情是在使用NHibernate進行測試的時候,居然提示我某個查詢不能執行,而我在VS 2008的資料庫的查詢裡面那個查詢是可以執行的SELECT this_.ID as ID2_0_, this_.BookName as BookName2_0_, this_.LangID as LangID2_0_ FROM dbo.Book this_ 我實在是很無奈啊,找錯誤NHibernate扔出來的異常的InnerException也看不出什麼來,我就自己用ADO寫了一個

System.Data.SQLServerCe.SQLCeConnection conn
=new System.Data.SQLServerCe.SQLCeConnection(@"Data Source=E:\Loning\Loning.Remit\db.sdf"); 
SQLCeCommand command=new SQLCeCommand("SELECT this_.ID as ID2_0_, this_.BookName as 
BookName2_0_, this_.LangID as LangID2_0_ FROM dbo.Book this_",conn);
conn.Open();

最後這東西提示表名異常,我一檢查表名,想起由於是SQL Server生成的,帶著個dbo.字首,發現生成的NHibernate的配置檔案


namespace="Loning.Remit.BusinessObjects" assembly="Loning.Remit">











其中存在dbo.,去掉之後正常,於是更改Codesmith的這個模板.把table.FullName改成table.Name,生成後配置檔案正確,而後重新生成一遍,編譯.過了. 我從下午5點開始折騰,一直折騰到11點,總算把這些問題解決了,希望CE這東西可以好好工作...

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-611876/,如需轉載,請註明出處,否則將追究法律責任。

相關文章