2011-08-05 69 views
0

我想使用连接到SQL Server 2008的EF 4.0/4.1执行项目的“快速集成”(又名“桌面集成”)测试。这意味着我需要用更轻量级的东西替换SQL Server 2008上的依赖。我希望在mstest或mbunit中执行时交换SQL CE 4.0。实体框架,SQL CE 4.0和数据库测试自动化

我已经确定了如何转换EDMX文件以使其与SQL CE 4.0兼容。我的意图是从我的mstest或mbunit项目中的预生成事件中为CE使用生成EDMX。但是我需要知道的是,我如何说服EF使用我的新生成的EDMX文件,从我的测试项目中,而不是生产EDMX文件?我认为这不像改变连接字符串那么简单。

我怀疑EDMX文件作为资源嵌入到构建的程序集中,所以也许这个问题是关于如何在资源被编译到DLL之前交换资源。但是,如果我错误地回答这个问题,我只想指导如何实现我的目标。

+0

如果您的SQL CE或SQLExpress本地mdb具有相同的生产模式,为什么您不能继续使用生产实体,只需将连接字符串替换为指向mdb而不是SQL Server?把事情简单化。 – nithins

+0

@nithins:SQL CE有限制(例如它只有unicode,所以没有'varchar'类型)需要EDMX文件的转换。 –

+0

SQLExpress功能更强大,而且仍然轻巧。 – nithins

回答

1

问题是EDMX只是设计时间功能。拥有新的EDMX意味着什么。 EDMX在编译过程中分为三个独立的文件:.ssdl,.msl,.csdl。这些文件指定了真正的映射(您只需更改.ssdl即可将SQL Server交换到SQL Server CE)。因此,最简单的方法是将您的模型设置为generate files to build directory,而不是将它们添加为资源。之后,您只需在您的测试项目中使用修改的.ssdl文件和相同的.msl和.csdl文件(文件路径是连接字符串的一部分)。

无论如何,我不喜欢这个想法。您将使用不同的映射定义对不同的数据库进行集成测试=它闻起来像您将测试另一个应用程序。集成测试应该是缓慢的,以便针对您的目标环境运行它们。事实上,SQL Server和SQL Server CE非常接近,替换测试应该可以工作,但仍然存在差异。

+0

“快速整合”旨在补充而不是取代“缓慢整合”的故事。另外,我不打算更改'.msl'文件。 SQL CE数据库将作为测试初始化​​步骤从EF上下文中生成。因此它应该与生产数据库几乎相同。 –