实体框架、SQL CE 4.0 和 DB 测试自动化

Posted

技术标签:

【中文标题】实体框架、SQL CE 4.0 和 DB 测试自动化【英文标题】:Entity Framework, SQL CE 4.0, and DB Test Automation 【发布时间】:2011-08-05 18:01:47 【问题描述】:

我想使用连接到 SQL Server 2008 的 EF 4.0/4.1 对项目执行“快速集成”(又名“桌面集成”)测试。这意味着我需要用更多东西替换对 SQL Server 2008 的依赖轻的。我想换入 SQL CE 4.0,从 mstest 或 mbunit 执行。

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

我怀疑 EDMX 文件作为资源嵌入到构建的程序集中,所以这个问题可能是关于如何在资源编译成 DLL 之前交换资源。但是,如果我做错了,我只想获得有关如何实现我的目标的指导。

【问题讨论】:

如果您的 SQL CE 或 SQLExpress 本地 mdb 将具有相同的生产模式,为什么您不能继续使用生产实体并换出连接字符串以指向 mdb 而不是 SQL 服务器?保持简单。 @nithins:SQL CE 有限制(例如,它是 unicode-only,因此没有像 'varchar' 这样的类型),需要转换 EDMX 文件。 SQLExpress 功能更加全面,而且仍然很轻巧。 【参考方案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 非常接近,并且可以替代测试,但仍然存在差异。

【讨论】:

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

以上是关于实体框架、SQL CE 4.0 和 DB 测试自动化的主要内容,如果未能解决你的问题,请参考以下文章

如何让实体数据模型与 SQL Server CE 4.0 一起使用?

如何使用 SQL CE 4.0 创建内存数据库?

Visual Studio 的 SQL Server CE 4.0 数据提供程序在哪里?

使用带有实体框架代码优先和 ASP.NET MVC 3 和 mvc miniprofiler 的 SQL Server CE 时出现问题

使用 Sql Management Studio 2008 连接到 Sql Server CE 4.0 时出现问题

实体框架、ASP.NET 和 SQL Server CE