我已经问过如何在使用Server中的视图时注入存储过程支持。
How to use stored procedures in NHibernate for Create/Update when working with database view
下面是一个映射文件:
<sql-insert>
exec sp_cycle_insert ?,?,?
</sql-insert>
<sql-update>
exec sp_cycle_update ?,?,?,?,?,?
</sql-update>
<sql-delete>
raiserror ('Cycle can not be deleted', 10, 1)
</sql-delete>所以,我做了重构等等,我做了我的测试.都失败了。
原因是Server具有视图和存储过程,而每次运行测试时,我都会使用以下方法从头设置数据库:
new SchemaExport(configuration).Execute(false, true, false);我考虑了可能的解决方案,这里有:有没有办法:
另一方面,运行脚本可能会失败(目前我使用sdf文件,但如果将来更改为不同的提供程序会怎么样?)此外,过程/视图使用和构造,以及一些 Server 2005函数,这些函数在测试期间不能被数据库所支持。
access="nosetter.camelcase“
如果我切换到模拟存储库,我将负责在代码中实现视图的逻辑。还有其他解决办法吗?或者我有大麻烦了!?
发布于 2012-08-28 17:55:39
使用数据库所需的内容(喜欢的过程、视图等)运行附加脚本(我猜这是解决方案)
为此使用IAuxiliaryDatabaseObject对象。它将包含使用SchemaExport创建/删除模式时要运行的额外脚本。这个/这些对象传递给NH配置对象(AddAuxiliaryDatabaseObject)。
所以我想是时候去模拟存储库了。但是在这里我也看到了一些障碍:视图计算一些只读属性,NHibernate访问支持字段使用
你应该两者兼得。对真实的数据库进行集成测试,以验证您的基础设施/DAL/任何您调用的it层是否工作。在较高层中,您可能希望编写单元测试,而不是在存储库之类的东西被嘲弄的地方。如果我正确理解了您的问题,您在设置测试状态时会遇到问题,因为有些数据是关于您的实体的私有数据?这并不是由NH/repos/data访问引起的“问题”,而是一个普遍的问题。有不同的解决方法,您可以;放松您的API,使它更可测试,有一个ctor接受所有的数据,使用反射的方式,让您的实体的接口是可读的,但它的实现有设置等等。很难给出一般性的建议,但试图找到适合你的情况的方式。
https://stackoverflow.com/questions/12163089
复制相似问题