初探SQL Server CE + Codesmith用法
硬盤壞了也是一種契機(jī),我突然想到了SQL Server還有一個CE版本,現(xiàn)在不止提供For Mobile的,還提供桌面版.這種可愛的嵌入式數(shù)據(jù)庫可比沒意思的Access好得多了. 這東西雖然沒store function(其實(shí)有ORM基本沒必要用),但是索引啊,表關(guān)系啊還是很全面的.微軟的東西就是好,造福全懶人嘛..
然而我的數(shù)據(jù)庫原來是Access的,在網(wǎng)上找了半天工具只找到一個SQL To SQL Ce的工具.于是用Access的升遷向?qū)w到MS SQL,然后在MS SQL Server里面建立表關(guān)系.然后用那個工具導(dǎo)入到SQL CE里面. 然后又自己編譯了一個Codesmith的數(shù)據(jù)庫Schema provider(因?yàn)橐郧斑@個是for 4.0的,而我的是5.0).
那個遷移工具貌似有點(diǎn)問題,沒有把表關(guān)系完全copy過去,自己的SQL Menagement Studio版本可能太低,不能打開3.5的CE數(shù)據(jù)庫.結(jié)果用Codesmith就沒法生成我要的關(guān)系.不爽.想到NHibernate其實(shí)對于表關(guān)系是不依賴于數(shù)據(jù)庫的,只要有表就可以了,所以想到一個特別二的方法,就是用MS SQL做Codesmith的數(shù)據(jù)源,生成文件,而程序中則使用遷移后的CE數(shù)據(jù)庫.(其實(shí)感覺直接用MS SQL Server也可以,***發(fā)布的時候換CE)
不過最郁悶的事情是在使用NHibernate進(jìn)行測試的時候,居然提示我某個查詢不能執(zhí)行,而我在VS 2008的數(shù)據(jù)庫的查詢里面那個查詢是可以運(yùn)行的SELECT this_.ID as ID2_0_, this_.BookName as BookName2_0_, this_.LangID as LangID2_0_ FROM dbo.Book this_ 我實(shí)在是很無奈啊,找錯誤NHibernate扔出來的異常的InnerException也看不出什么來,我就自己用ADO寫了一個
System.Data.SQLServerCe.SQLCeConnection conn =new System.Data.SQLServerCe.SQLCeConnection(@"Data Source=E:\Loning\Loning.Remit\db.sdf"); BookName2_0_, this_.LangID as LangID2_0_ FROM dbo.Book this_",conn); |
***這東西提示表名異常,我一檢查表名,想起由于是SQL Server生成的,帶著個dbo.前綴,發(fā)現(xiàn)生成的NHibernate的配置文件
<?xml version="1.0" encoding="utf-8" ?> namespace="Loning.Remit.BusinessObjects" assembly="Loning.Remit"> |
其中存在dbo.,去掉之后正常,于是更改Codesmith的這個模板.把table.FullName改成table.Name,生成后配置文件正確,而后重新生成一遍,編譯.過了. 我從下午5點(diǎn)開始折騰,一直折騰到11點(diǎn),總算把這些問題解決了,希望CE這東西可以好好工作...
【編輯推薦】