使用 SQLite 测试 NHibernate“没有这样的表” - 生成模式

2024-05-12

我正在尝试使用内存中的 SQLite 数据库来测试 NHibernate 提供的数据层。

我读过很多关于如何进行此设置的博客和文章,但我现在很困惑为什么它不起作用。

问题 - 当我运行单元测试时,我收到错误“没有这样的表:学生”。我读过的文章表明这​​是因为架构未生成,或者我的 SchemaExport 和查询之间的连接正在关闭。我检查了我能想到的所有地方,但看不出这两种情况是如何发生的。

我的测试输出日志如下所示:

OPEN CONNECTION

drop table if exists "Student"

drop table if exists "Tutor"

create table "Student" (
    ID  integer,
   Name TEXT,
   DoB DATETIME,
   TutorId INTEGER,
   primary key (ID)
)

create table "Tutor" (
    ID  integer,
   Name TEXT,
   primary key (ID)
)
NHibernate: INSERT INTO "Student" (Name, DoB, TutorId) VALUES (@p0, @p1, @p2); select last_insert_rowid();@p0 = 'Text1', @p1 = 01/12/2010 14:55:05, @p2 = NULL
14:55:05,750 ERROR [TestRunnerThread] AbstractBatcher [(null)]- Could not execute query: INSERT INTO "Student" (Name, DoB, TutorId) VALUES (@p0, @p1, @p2); select last_insert_rowid()
System.Data.SQLite.SQLiteException (0x80004005): SQLite error

no such table: Student

at System.Data.SQLite.SQLite3.Prepare(String strSql, SQLiteStatement previous, String& strRemain)

at System.Data.SQLite.SQLiteCommand.BuildNextCommand()

at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)

at System.Data.SQLite.SQLiteDataReader.NextResult()

at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)

at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)

at System.Data.SQLite.SQLiteCommand.ExecuteDbDataReader(CommandBehavior behavior)

at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()

at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)

14:55:05,781 ERROR [TestRunnerThread] ADOExceptionReporter [(null)]- SQLite error
no such table: Student
DISPOSE
CLOSING CONNECTION

最初我使用自己的代码进行连接/会话管理,但已转移到中的代码这篇博文 http://jasondentler.com/blog/2009/08/nhibernate-unit-testing-with-sqlite-in-memory-db/翻译为 C#,并对 DBConfig 方法进行了一些更改,并使用一些调试语句来显示连接状态。

private FluentNHibernate.Cfg.Db.IPersistenceConfigurer GetDBConfig()
{
    return SQLiteConfiguration.Standard
                               .ConnectionString((ConnectionStringBuilder cs) => cs.Is(CONNECTION_STRING))
                               .ProxyFactoryFactory("NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu")
                               .Raw("connection.release_mode", "on_close");
}

我读完后添加了 on_closethis http://www.codethinked.com/nhibernate-20-sqlite-and-in-memory-databases

我的测试代码如下所示:

[Test]
public void CanGetStudentById()
{
    using (var scope = new SQLiteDatabaseScope<StudentMapping>())
    {
        using (ISession sess = scope.OpenSession())
        {
            // Arrange
            var repo = new StudentRepository();
            repo.Save(new Student() { Name = "Text1", DoB = DateTime.Now });

            // Act
            var student = repo.GetById(1);

            // Assert
            Assert.IsNotNull(student);
            Assert.AreEqual("Text1", student.Name);
        }
   }
}

我在这里忽略了什么?

Update:我创建了一个连接到 SQLite 文件数据库的类的副本,它工作得很好。所以这一定与连接被关闭有关。


如果将测试方法更改为以下内容,它会起作用吗?

[Test]
public void CanGetStudentById()
{
    using (var scope = new SQLiteDatabaseScope<StudentMapping>())
    {
        using (ISession sess = scope.OpenSession())
        {
            // Arrange
            sess.Save(new Student() { Name = "Text1", DoB = DateTime.Now });

            // Act
            var student = sess.Get<Student>(1);

            // Assert
            Assert.IsNotNull(student);
            Assert.AreEqual("Text1", student.Name);
        }
   }
}

我冒昧地猜测您的 StudentRepository 正在打开自己的会话,因此看不到该表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SQLite 测试 NHibernate“没有这样的表” - 生成模式 的相关文章

随机推荐

  • 规范“毒”方式真的值得吗? (3NF)

    我正处于数据库设计的早期阶段 所以还没有最终的结果 并且我正在为具有可选标签的线程使用 TOXI 3表设计 但我忍不住觉得加入是并不是真的必要 也许我只需要依赖我的简单标签列posts我可以在其中存储类似 varchar 的表
  • System.Web.HttpException 无法加载类型“[命名空间].???”

    这开始于无法加载类型 全局 错误 在我尝试了一些方法后 没有找到删除 Global asax 文件的位置 现在错误是无法加载类型 namespace 在哪里 是我尝试加载的每个页面的类名 该网站 在 VS2008 本地开发计算机中执行时 工
  • 使用 lambda 作为模板参数时出现的编译器错误是什么?

    Edit 这已被报告为 Microsoft Connect 上的 VS2012 C 编译器错误 link https connect microsoft com VisualStudio feedback details 788426 vs
  • 使用 django-filters 设置初始值?

    当使用Django 过滤器 https django filter readthedocs orgapp 如何设置过滤器中字段的初始值 通常采用标准形式Django 例如一个简单的选择列表形式 class MyForm forms Form
  • 如何将任意颜色的色度键滤镜应用到实时摄像头源ios?

    基本上我想将色度键滤镜应用到 ios 实时摄像头源 但我希望用户选择将被另一种颜色替换的颜色 我找到了一些使用绿屏的示例 但我不知道如何动态替换颜色而不仅仅是绿色 知道如何以最佳性能实现这一目标吗 您之前曾询问过我的情况GPUImage h
  • iOS 以编程方式撤销位置服务权限

    有没有一个功能CLLocationManager or UIApplication撤销位置权限类似功能unregisterForRemoteNotifications撤销推送通知权限 The stopUpdatingLocationCLLo
  • Typescript:通用对象映射函数

    对于以下类似的函数 map但对于物体 function mapObject f obj return Object keys obj reduce ret key gt ret key f obj key return ret 有没有办法输
  • 活动工作流程与运行工作流程

    本周末在伊利诺伊州莱尔举行的 SharePoint Saturday 活动上 Robert Bogue 表示活动工作流和正在运行的工作流之间存在差异 我在网上查了一下 有人能解释一下吗 如果服务器上可以有多达数百万个活动工作流程 为什么每台
  • 更改 ProgressDialog 的背景

    我正在尝试更改背景ProgressDialog 我在网上搜索并找到了各种建议 例如如何从对话框中删除边框 https stackoverflow com questions 8051581 how to remove border from
  • 如何在Java中命名HashMap?

    这可能是一个愚蠢的问题 但我从未找到一种令人满意的方式来命名类型变量HashMap
  • spring-cloud-stream 请求-回复消息传递模式

    是否有一种应该与 spring cloud stream 一起使用的请求 答复模式 我在 spring cloud stream 上找到的所有文档都是针对 MessageChannel send 即发即弃类型的生产者 并且我熟悉 sprin
  • 通过 AJAX jquery 更改表格背景颜色?

    设想 当我的网页加载时 自动搜索单元格已由用户输入并且具有价值 如果已输入 表格背景颜色将为红色 否则为绿色 假设该表尚未输入 桌子背景绿色是这样的 和表的源代码 table width 1023 height 200 border 1 t
  • Android Lollipop 上的海拔 + 透明度错误

    在 API 21 上为具有一些 alpha 例如 99fe0038 和一些高程的视图使用背景颜色会显示两个圆圈 一个用于视图本身 另一个用于内部 标高和背景颜色通过代码设置 view setElevation getResources ge
  • TwiML 应用程序 - 当用户回复 Twilio Number 的 STOP/START 时调用 AWS Lambda

    这是我的场景 我正在使用 Twilio 向我的客户发送短信 当用户决定不接收这些短信时 他们会回复 停止 并开始再次接收 这是由 Twilio 自动处理的 但是 我需要调用 AWS Lambda 函数并相应地更新我的数据库 这就是我到现在为
  • 尝试了解CMTime

    我见过一些examples https stackoverflow com questions 5808557 avassetwriterinputpixelbufferadaptor and cmtime of https stackov
  • 在 R 中索引数据帧

    再会 我不明白这里的主题 就像它有效但我不明白为什么 我有这个数据库 planets df is pre loaded in your workspace Use order to create positions positions lt
  • 具有少量父设备属性的 udev 规则

    我需要复杂且通用的udev规则来确定插入任何 USB 集线器的特定端口的 USB 设备 所以 我必须结合设备树不同层的父属性 我有这个 udevadm info query all name dev ttyUSB0 attribute wa
  • 点击后退按钮时,iCarousel 会显示在上一页

    当我按下后退按钮时 这iCarousel仍然显示 1 秒 为什么会发生这种情况以及如何阻止这种情况 我已经使用故事板创建了 iCarosel 视图 void viewDidUnload super viewDidUnload self ca
  • 为什么 ASP.NET 在内容更改后提交 TextBox 控件的原始值?

    我有一个 Web 表单 允许用户修改某些字段中的数据 主要是 TextBox 控件 还有几个 CheckBox DropDownList 和一个 RadioButtonList 控件 并使用提交按钮保存更改 相当标准的东西 问题是 我需要跟
  • 使用 SQLite 测试 NHibernate“没有这样的表” - 生成模式

    我正在尝试使用内存中的 SQLite 数据库来测试 NHibernate 提供的数据层 我读过很多关于如何进行此设置的博客和文章 但我现在很困惑为什么它不起作用 问题 当我运行单元测试时 我收到错误 没有这样的表 学生 我读过的文章表明这