当前位置:  开发笔记 > 数据库 > 正文

使用Sqlite InMemory DB进行单元测试MSSQL-DB

如何解决《使用SqliteInMemoryDB进行单元测试MSSQL-DB》经验,为你挑选了1个好方法。

我正在尝试实现这个解决方案: NHibernate-20-SQLite-and-In-Memory-Databases

唯一的问题是我们有这样的hbms:


[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)?

zvolkov.. 7

我们在SQLite上遇到了太多问题,最终迫使我们切换到SQL Express.我记得的问题:

    SQLite在内存中使用时会在会话关闭时丢弃数据库

    SQLite不支持一堆SQL构造,如ISNULL这样的基本构造,但也像SQL 2005和2008中添加的公共表表达式和其他更高级的构造.当您开始编写复杂的命名查询时,这变得很重要.

    SQLite的datetime比SQL Server具有更大范围的可能值

    当在事务范围中使用时,API NHibernate用于SQLite的行为与用于MS SQL Server的ADO.NET不同.一个例子是hbm-to-ddl工具,其Execute方法在与SQL Server的事务内部不起作用,但与SQLite一起工作正常.

总而言之,基于SQLite的单元测试远不能最终代表您在PROD中使用MS SQL Server时遇到的问题,因此会破坏整体单元测试的可信度.



1> zvolkov..:

我们在SQLite上遇到了太多问题,最终迫使我们切换到SQL Express.我记得的问题:

    SQLite在内存中使用时会在会话关闭时丢弃数据库

    SQLite不支持一堆SQL构造,如ISNULL这样的基本构造,但也像SQL 2005和2008中添加的公共表表达式和其他更高级的构造.当您开始编写复杂的命名查询时,这变得很重要.

    SQLite的datetime比SQL Server具有更大范围的可能值

    当在事务范围中使用时,API NHibernate用于SQLite的行为与用于MS SQL Server的ADO.NET不同.一个例子是hbm-to-ddl工具,其Execute方法在与SQL Server的事务内部不起作用,但与SQLite一起工作正常.

总而言之,基于SQLite的单元测试远不能最终代表您在PROD中使用MS SQL Server时遇到的问题,因此会破坏整体单元测试的可信度.


当然我们会在Buildserver上运行Mssql上的测试,在我们想用sqlite运行的Dev-pc上出于性能原因.它丢弃数据库是一个奖励.我们主要通过nhibernate工作,所以如果我们想要复杂的命名查询,那么缺少复杂的运算符只会影响我们,或者?另请注意:mssql-express的性能如何?我可以轻松地创建丢弃dbs吗?
推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有