4

Model と ModelTest という 2 つの C# プロジェクトがあります。モデルは ActiveRecord オブジェクト (Hibernate のラッパー) で構成されます。ModelTest で、単純な単体テストを作成しました。

[TestClass]
public class UnitTest1
{
    [TestInitialize]
    public void Init()
    {
        Model.Init();
        Model.CreateSchema();
    }

    [TestMethod]
    public void TestMethod1()
    {
    }
}

Model.Init() は、アセンブリ Model のすべてのタイプを ActiveRecord に登録します。Model.CreateSchema() は、NHibernate の CreateSchema() を呼び出す ActiveRecordStarter.CreateSchema() をラップします。

このコードは、単体テストを実行すると正常に動作しますが、単体テストを「デバッグ」すると失敗します。デバッグ モードでは、CreateSchema() で例外が発生します。

NpgsqlException: 'ERROR: 42P01: table "user" does not exist'

テストを実行する前にデータベースが空の場合、SQL呼び出し「テーブルユーザーカスケードのドロップ」中に例外が発生したようです。新しいテーブルを作成する前に、常にドロップが送信されると想定しています。

ドロップクエリの結果に関して、Npgsql はデバッグモードで異なる動作をしますか?

4

1 に答える 1

1

Tarnschafとまったく同じ問題が発生しましSchemaUpdate.Create(...)た。失敗し、問題のSQLがdrop table "tablename" cascade原因で、上記と同じ「テーブルが存在しません」というエラーが発生しました。

プロジェクトの1つに、同じ場所に存在しなくなったNhibernate関連のアセンブリへの参照があったことが判明しました。ソリューションをクリーンアップして再構築したときに、なぜこれが表示されなかったのかわかりません。プロジェクトからすべての参照を削除して再度追加すると、問題が解決しました(私にとって)。

将来誰かを助ける場合に備えて、これを投稿するだけです。Nhibernateの例外は役に立たなかった。

于 2011-07-30T02:17:40.490 に答える