我和我的团队目前正在做一个项目,我们正在使用Entity Framework 4.1(Code First)。我们希望编写一些测试,但我们不希望它们运行在我们的主数据库上,因为我们在新加坡有一个团队为我们所做的事情编写客户端,并且他们不断地访问该数据库。开发和生产数据库
所以为了避免运行我们的测试时的干扰,我们希望有一个不同的数据库进行测试。在使用实体框架时,我们如何处理第二个数据库?我们需要一个半自动的解决方案(至少),所以每次我们需要运行测试时,我们都无需摆弄Web.config。
我和我的团队目前正在做一个项目,我们正在使用Entity Framework 4.1(Code First)。我们希望编写一些测试,但我们不希望它们运行在我们的主数据库上,因为我们在新加坡有一个团队为我们所做的事情编写客户端,并且他们不断地访问该数据库。开发和生产数据库
所以为了避免运行我们的测试时的干扰,我们希望有一个不同的数据库进行测试。在使用实体框架时,我们如何处理第二个数据库?我们需要一个半自动的解决方案(至少),所以每次我们需要运行测试时,我们都无需摆弄Web.config。
解决方案从this后逮捕:
//Get the connection string from app.config and assign it to sqlconnection string builder
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(((EntityConnection)context.Connection).StoreConnection.ConnectionString);
sb.IntegratedSecurity = false;
sb.UserID ="User1";
sb.Password = "Password1";
//set the object context connection string back from string builder. This will assign modified connection string.
((EntityConnection)context.Connection).StoreConnection.ConnectionString = sb.ConnectionString;
这使您可以在运行时改变连接字符串。还有其他几种可能的解决方案:
与周围的web.config顺藤摸瓜能的过程是很容易,除非你正在使用web.config Transformations这是错误...。
我会在Visual Studio中为您的项目创建一个新配置“Test”...它可以是您现有开发配置(或调试/发布,无论)的副本。然后,右键单击解决方案资源管理器中的Web.config文件,然后单击添加配置转换。按照指示here如何编写转换文件。如果你只需要改变的EF连接字符串测试环境会是这个样子的web.Test.config:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="AdventureWorksEntities"
connectionString="metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl;
provider=System.Data.SqlClient;provider connection string='Data Source=TestDB;
Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;
multipleactiveresultsets=true'" providerName="System.Data.EntityClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
只是一定要建立在你想要的正确配置下运行你的测试。
还有一个Visual Studio外接SlowCheetah这使得这整个过程在IDE中非常无缝的。
+1为SlowCheetah – 2012-04-07 23:49:53
@SayedIbrahimHashimi +1是因为“在MS Build上写了这本书”以及使我的工作更轻松的许多工具。感谢那。 – 2012-04-09 21:22:22
不客气:) – 2012-04-28 02:45:02
你在说什么样的“测试”?使用部署脚本中指定的自己的数据库(通过修改web.config)为您的远程团队部署单个版本时出了什么问题? – 2012-03-31 20:02:02
我们正在开发一个WCF Web服务,并且正在认真开发中。必须为他们部署一个独特的版本(使用他们自己的Web.config)意味着,我们每次部署时都必须完成所有这些手动工作。 – Nilks 2012-03-31 20:14:51
不,它不会。似乎你从来没有听说过只能设置一次并自动运行的持续集成/部署。 – 2012-03-31 20:17:27