今天解決了一個IBatis.Net的使用的問題,這個問題困擾了很久。在做一個管理系統,後台Server采用的是HTTP Server+DB來提供服務。 最初使用的是Perl+BerkeleyDB,演進到Servlet+MySQL,然後又演進到ASP.NET + SQL Server,從Servlet開始ORM使用的是Hibernate,到了ASP.NET後,Hibernate轉變為了NHibernate。一次偶然的機會,接觸到了別人的一個系統,也想把這個管理系統中的NHibernate替換為IBatis.Net,並且把請求統一放到一個Controller進行Dispatch,也可以在Controller中加入日志、權限、驗證等機制。當然,對於Struts等框架都是采用類似的機制完成的。自己也是一種借鑒和學習。在測試使用IBatis.Net的時候遇到一個問題,NHibernate的時候,插入一個對象,就可以獲得這個對象對應的記錄的自動生成的PK。IBatis可以通過SelectKey來做,我確實也有在Java下的例子,可是在網上看到的一些資料指出的在IBatis.Net中的用法,但是不能成功。一直搞了很久。今天終於是解決了。自己給自己記錄一下吧。
<statements>
<statement id="INSERT-ADMIN" resultClass="int">
insert into admin (lastlogin, flag, controlflag, username, passWord, description)
values (#LastLogin#, #Flag#, #ControlFlag#, #Username#, #PassWord#, #Description#)
SELECT SCOPE_IDENTITY() AS value
</statement >
這個是正確的寫法,不需要用到selectKey,自己以前的錯誤在兩個地方,一個是在statement中沒有寫resultClass,另外一個就是用 select @@IDENTITY as id(value),始終不行,這個我一直沒有搞明白是什麼原因。只是根據自己的需要,返回的應該是這個scope中的id,所有使用select scope_identity 就可以了。