去る7月30日に、NHibernateオブジェクトリレーショナルマッピングツールキットの3.2.0 GAリリースが公開されました。
Julian Maughanの尽力のおかげで、このNHibernateの基本ディストリビューションにはSQL Anywhere用の方言が2つ含まれています。それらはSybaseSQLAnywhere10Dialect.csとSybaseSQLAnywhere11Dialect.csという名前が付けられていて、それぞれSQL Anywhereのバージョン10と11において、ほとんど変更することなく使用することができます。しかし、SQL Anywhereのソフトウェア構成は12.0.1リリースになっていくつかの点で変更されており、NHibernate 3.2.0ディストリビューションにはSQL Anywhere 12用のNHibernate方言が含まれていません。そこで、SQL Anywhere 12.0.1に対するNHibernateのサポートについて再び検討したいと思います。
私は2010年1月に、SQL Anywhere 12.0.0用のNHibernate方言に関する記事を投稿していますが、これはNHibernate 2.1.0リリースについてのものでした。NHibernateのバージョン3はいくつかの変更をもたらしており、たとえば、自分でNHibernateをビルドするにはMicrosoft Visual Studio 2010が必要になります。実際、最善のソフトウェア構成でNHibernateとSQL Anywhere 12.0.1とを利用するには、自分でビルドする必要があります。
重要な点を要約すると、以下のようになります。
- 私が2010年1月に投稿したSQL Anywhere 12用の方言は、ほとんど変更がありませんが、小さな変更が2点だけあります。第一の変更点は、そのクラス名がSQLAnywhere12DialectからSybaseSQLAnywhere12Dialectに変更されたことです。これは、JulianがNHibernate 3.1.0ディストリビューションに加えたSQL Anywhere 11および12用の方言のクラス名に対する変更と一致させるためです。第二の変更点は、この方言がメタデータクラスであるSybaseSQLAnywhere11DataBaseMetaDataを参照することです。この点については次の項を参照してください。
- /NHibernate/src/NHibernate/Dialect/Schemaディレクトリに含まれる新規のメタデータクラスであるSybaseSQLAnywhere11DataBaseMetaDataは、GetReservedWords() APIを適切にサポートしています。これはPaul Gibsonが以前に報告した問題への対応です。
- SQL Anywhere 12.0.1においてSQL Anywhere ADO.NETプロバイダ用のADO.NETライブラリの名前に加えられた変更をサポートするには、/Nhibernate/src/NHibernate/Driver内にSybaseSQLAnywhere12Driverという名前の新しいドライバが必要です。
新しいソースファイルの.zipアーカイブは、ここに保存されています。このアーカイブには、NHibernate 3.2.0 DLLを再コンパイルした後で妥当性テストに使用できるHelloNHibernateのインスタンスも含まれています。ただし、このアーカイブに含まれているVisual Studioソリューションを使用するためには、SQL Anywhereの.NETプロバイダDLLであるiAnywhere.Data.SQLAnywhere.v4.0.dllをHelloNHibernate\bin\Debugディレクトリにコピーすることが必要になるので注意してください。また、このアーカイブに含まれているhelloseq.dbデータベースをSQL Anywhere 12.0.1サーバ上で実行することも必要になります。このデータベースには、プライマリキーとしてシーケンスを用いているEmployeeテーブルが含まれています。