2014-08-26 遇到的小问题
?
? ?不能快速的保存bug的確是很不爽的事情 ,不僅客戶著急 領(lǐng)導(dǎo)也著急 ,自己也著急。。。。。。。。哈哈
? ?
? ?原來好好的一個(gè)平臺(tái) 簡(jiǎn)單的一個(gè)插入記錄 突然就報(bào)錯(cuò)了
? ?錯(cuò)誤為 could not insert #9521
? ?原來項(xiàng)目是用 NHibernate 做的插入
? ?拋出的異常 真是無法定位到底是什么錯(cuò)誤啊
? ?于是想打開vs調(diào)試下遠(yuǎn)程庫?
? ?結(jié)果調(diào)試過程中 無法查詢變量的值
? ?在調(diào)試即時(shí)窗口里 ?提示 表達(dá)式計(jì)算器中發(fā)生內(nèi)部錯(cuò)誤
? ?郁悶 ?于是重啟vs
? ?又提示 源文件與模塊生成時(shí)的不同
? ?網(wǎng)上搜了下解決方案 ?修改 調(diào)試 --》 選項(xiàng) --》 常規(guī)里面 去掉 要求源文件與原始版本相匹配 ok 了
? ?調(diào)試過程中發(fā)現(xiàn)?
? ?-- 錯(cuò)誤代碼拋出的異常 為 直接的 Exception 查看了下 innerException 結(jié)果為
? ?"當(dāng) IDENTITY_INSERT 設(shè)置為 OFF 時(shí),不能向表 'OrderList' 中的標(biāo)識(shí)列插入顯式值“
? ?理論上來說 這個(gè)表的主鍵設(shè)置了 自增長(zhǎng),查了下 果然 服務(wù)器的表 與 測(cè)試的表 不符合 應(yīng)該是有人改了數(shù)據(jù)庫,
? ?只能是修改下 hbm.xml 文件 ok ,耗時(shí)一個(gè)半小時(shí) ,
? ?時(shí)間主要浪費(fèi)在 vs調(diào)試 這上面 ,錯(cuò)誤沒能夠明顯的拋出
? ? 調(diào)試錯(cuò)誤后 順便總結(jié)下吧
? ? innerException ?msdn的地址
? ?http://msdn.microsoft.com/zh-cn/library/system.exception.innerexception.aspx
? ? 總的來說 拋出innerException 能更快的定位到錯(cuò)誤,但并不是每個(gè)Exception 都會(huì)有 innerException
?
? ?再一個(gè) vs 的 要求源文件與原始版本匹配 ,網(wǎng)上還有一個(gè)解決辦法是 刪除bin目錄 重新生成 我沒試
? ?找了下這樣做可以的原因 應(yīng)該是 pdb文件儲(chǔ)存了項(xiàng)目的調(diào)試信息,可能與修改不符合
? ?關(guān)于 pdb 文件,還真沒仔細(xì)研究過。
? ?pdb 文件 ?http://www.wintellect.com/blogs/jrobbins/pdb-files-what-every-developer-must-know
?
? ?nhibernate 主鍵
? ?
(1) assigned
主鍵由外部程序負(fù)責(zé)生成,無需NHibernate參與。
(2) hilo
通過hi/lo 算法實(shí)現(xiàn)的主鍵生成機(jī)制,需要額外的數(shù)據(jù)庫表保存主
鍵生成 歷史狀態(tài)。
?
<!--<generator class="hilo">
<param name="table">Tbl_Basic_Identity</param>
<param name="column">ProductVerifyMessageID</param>
<param name="max_lo">0</param>
</generator>-->
?
(3) seqhilo
與hilo 類似,通過hi/lo 算法實(shí)現(xiàn)的主鍵生成機(jī)制,只是主鍵歷史
狀態(tài)保存在Sequence中,適用于支持Sequence的數(shù)據(jù)庫,如Oracle。
(4) increment
主 鍵按數(shù)值順序遞增。此方式的實(shí)現(xiàn)機(jī)制為在當(dāng)前應(yīng)用實(shí)例中維持
一個(gè)變量,以保存著當(dāng)前的最大值,之后每次需要生成主鍵的時(shí)候
將此值加1作為 主鍵。
這種方式可能產(chǎn)生的問題是:如果當(dāng)前有多個(gè)實(shí)例訪問同一個(gè)數(shù)據(jù)
庫,那么由于各個(gè)實(shí)例各自維護(hù)主鍵狀態(tài),不同實(shí)例可能生成同樣
的 主鍵,從而造成主鍵重復(fù)異常。因此,如果同一數(shù)據(jù)庫有多個(gè)實(shí)
例訪問,此方式必須避免使用。
(5) identity
采用數(shù)據(jù)庫提供的主鍵生成機(jī)制。如DB2、SQL Server、MySQL
中的主鍵 生成機(jī)制。
(6) sequence
采用數(shù)據(jù)庫提供的sequence 機(jī)制生成主鍵。如Oralce 中的
Sequence。
(7) native
由 NHibernate根據(jù)底層數(shù)據(jù)庫自行判斷采用identity、hilo、sequence
其中一種作為主鍵生成方式。) uuid.hex
由 Hibernate基于128 位唯一值產(chǎn)生算法生成16 進(jìn)制數(shù)值(編碼后
以長(zhǎng)度32 的字符串表示)作為主鍵。
(8) foreign
使用外部表的字段作為主鍵。
轉(zhuǎn)載于:https://www.cnblogs.com/havid/p/3937292.html
總結(jié)
以上是生活随笔為你收集整理的2014-08-26 遇到的小问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 驴友、野外探险者必须随身携带北斗信号弹吗
- 下一篇: 后期打僵尸我应该有些什么植物