4

我有两个 C# 项目,Model 和 ModelTest。模型由 ActiveRecord 对象(围绕 Hibernate 的包装器)组成。在 ModelTest 我创建了一个简单的单元测试:

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

    [TestMethod]
    public void TestMethod1()
    {
    }
}

Model.Init() 使用 ActiveRecord 注册所有类型的装配模型。Model.CreateSchema() 包装了 ActiveRecordStarter.CreateSchema(),它调用 NHibernate 的 CreateSchema()。

如果我运行单元测试,此代码工作正常,但如果我“调试”单元测试,它会失败。在调试模式下,CreateSchema() 发生异常:

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

在 SQL 调用“drop table user cascade”期间似乎引发了异常,如果在运行测试之前数据库为空,则显然会失败。我假设总是在创建新表之前发送 drop。

关于删除查询的结果,Npgsql 在调试模式下的行为是否不同?

4

1 回答 1

1

我遇到了与 Tarnschaf 完全相同的问题——SchemaUpdate.Create(...)会失败,并且有问题的 sqldrop table "tablename" cascade导致了上面提到的相同的“表不存在”错误。

事实证明,其中一个项目引用了一个不再位于同一位置的与 Nhibernate 相关的程序集。我不确定为什么在清理和重建解决方案时没有出现这种情况。从项目中删除所有引用并重新添加它们解决了问题(对我来说)。

只是发布这个以防万一它可以帮助其他人。Nhibernate 异常没有帮助。

于 2011-07-30T02:17:40.490 回答