6

このソリューションを実装しようとしています: NHibernate-20-SQLite-and-In-Memory-Databases

唯一の問題は、次のような hbms があることです。

<class name="aTable" table="[dbo].[aTable]" mutable="true" lazy="false">

これは[dbo]、mssql を使用しており、これは Sqlite では機能しないためです。

rhino-tools-dev グループで、マッピングからスキーマを削除することについて話しているこの投稿を見つけましたが、NH2 ではclassMapping.Schema.

がありますが、classMapping.Table.Schema読み取り専用のようです。たとえば、これは機能しません。

 foreach (PersistentClass cp in configuration.ClassMappings)            {
  // Does not work - throws a 
  //System.IndexOutOfRangeException: Index was outside the bounds of the array.
        cp.Table.Schema = "";
    }
  • Sqlite に無視するように指示する方法はありますか[dbo](試してみattach database :memory: as dboましたが、これは役に立たなかったようです)。
  • または、プログラムでクラスマッピングから削除できますか (残念ながら、現在 hbms を変更することはできません)。
4

3 に答える 3

9

SQLite にはあまりにも多くの問題があり、最終的に SQL Express に切り替えることになりました。私が覚えている問題:

  1. SQLite をメモリ内で使用すると、セッションが閉じられたときにデータベースが破棄されます
  2. SQLite は、ISNULL などの基本的な SQL 構造の束をサポートしていませんが、一般的なテーブル式や SQL 2005 および 2008 で追加された他のものなどのより高度な構造もサポートしていません。これは、複雑な名前付きクエリを書き始めるときに重要になります。
  3. SQLite の datetime は、SQL Server よりも可能な値の範囲が広い
  4. NHibernate が SQLite に使用する API は、トランザクションのスコープで使用される場合、MS SQL Server の ADO.NET とは異なる動作をします。1 つの例は hbm-to-ddl ツールで、その Execute メソッドは SQL Server とのトランザクション内では機能しませんが、SQLite では正常に機能します。

要約すると、SQLite ベースの単体テストは、PROD で MS SQL Server を使用するときに発生する問題を決定的に代表するものとはほど遠いため、単体テスト全体の信頼性が損なわれます。

于 2009-04-30T00:41:39.507 に答える
1

Sqlite を使用して、NH 2.0.1 で単体テストを実行しています。実際、私はこの問題に遭遇しませんでした。dbo を指定しなかっただけで、SqlServer のデフォルトだと思います。

ちなみに、設定ファイルには default_schema パラメータがあります。これは実際にはデータベース名ですが、もちろん SqlServer 構成の場合にのみ、そこに dbo を配置してみることができます。

于 2009-04-30T00:12:13.070 に答える