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時間もハマって悔しい!