Mono 2.4 + NHibernate 2.1.0 Alpha2 で SQL Server(2008 Express を使用)にアクセスする場合、NHibernate の SQL Server 用コンフィグファイルに、
<property name="adonet.batch_size">10</property>という設定があると、次のような例外が発生してうまくいかない。
Unhandled Exception: System.ArgumentNullException: Argument cannot be null. Parameter name: type at System.Activator.CheckType (System.Type type) [0x00000] at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] at NHibernate.AdoNet.SqlClientSqlCommandSet..ctor () [0x00000] at NHibernate.AdoNet.SqlClientBatchingBatcher..ctor (NHibernate.AdoNet.ConnectionManager connectionManager, IInterceptor interceptor) [0x00000] ...原因は、NHibernate.AdoNet.SqlClientSqlCommandSet で
static SqlClientSqlCommandSet() { Assembly sysData = Assembly.Load("System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); sqlCmdSetType = sysData.GetType("System.Data.SqlClient.SqlCommandSet"); Debug.Assert(sqlCmdSetType != null, "Could not find SqlCommandSet!"); }System.Data.SqlClient.SqlCommandSet の Type が取得ができず、null が返されるからだ。
Mono の System.Data(System.Data.dll)を調べてみたけど、System.Data.SqlClient 名前空間には SqlCommandSet クラスは存在しないようだ。また、MSDN では、SqlCommandSet に関する記述が見当たらなかった。
グーグル先生によれば、SQL Command の一括処理用のクラスらしいけど、もう使われていない、忘れられた子なのだろうか。うーむ、使われなくなった経緯が分からないが。
で、Mono 上での対応は、NHibernate の SQL Server 用コンフィグファイルにて、
<property name="adonet.batch_size">0</property>とすることで、アクセスできるようになった。
0 件のコメント:
コメントを投稿