我正在尝试实现这个解决方案: 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时遇到的问题,因此会破坏整体单元测试的可信度.
我们在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时遇到的问题,因此会破坏整体单元测试的可信度.