S2Dao -> OLEDB -> SQL Serverで、IDENTITY操作にハマったのでメモ
.NETのQuillでのお話。S2Containerでも同じかな。
app.configの
Provider=SQLOLEDB.1;Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;
と、Providerにバージョン番号を付けると、DB種類を認識できずにS2DaoがStandardDBとして扱ってしまう。
これは
Provider=SQLOLEDB;Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;
とプロバイダ識別名だけを記述すればOK。
DB種類が判別できない状態ではEntityのID属性が正しく働かない。
例えば、
<ID(IDType.IDENTITY)> _ Public Property Id() As Integer Get Return _id End Get Set _id = value End Set End Property
と書いてIDを自動発番に任せる。
ところがStandatdDBは当然ID属性をサポートしておらず、ほんとは"select @@identity"が必要なところでnullを返す。結果、Insert後のID取得処理で例外が発生する。
これで2時間もハマって悔しい!