2012-03-31 7 views
3

Mon équipe et moi-même réalisons actuellement un projet dans lequel nous utilisons Entity Framework 4.1 (Code First). Nous voulons écrire quelques tests, mais nous ne voulons pas qu'ils fonctionnent sur notre base de données primaire, car nous avons une équipe à Singapour qui écrit un client pour ce que nous faisons, et elle frappe constamment cette base de données. Afin d'éviter toute perturbation lors de l'exécution de nos tests, nous aimerions avoir une base de données différente pour les tests. Comment gérer une deuxième base de données lors de l'utilisation d'Entity Framework? Nous voulons une solution semi-automatique (au moins), nous n'avons donc pas besoin de jouer avec Web.config chaque fois que nous devons lancer des tests.Développement et production de bases de données

+0

De quel genre de "tests" parlez-vous? Quel est le problème avec le déploiement de la version unique pour votre équipe distante avec leur propre base de données spécifiée dans le script de déploiement (en modifiant web.config)? –

+0

Nous développons un service web WCF, et il est en développement sérieux. Devoir déployer une version unique pour eux (avec leur propre Web.config) signifierait que nous devons faire tout ce travail manuel chaque fois que nous déployons. – Nilks

+0

Non ce ne serait pas. On dirait que vous n'avez jamais entendu parler de l'intégration/déploiement continu qui est configuré une seule fois et s'exécute automatiquement. –

Répondre

1

Solution appréhendé de this après:

//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; 

Cela vous permet de modifier la chaîne de connexion lors de l'exécution. Il existe deux autres solutions possibles:

  1. Créer une propriété wrapper autour de la chaîne de connexion. À partir des tests, définissez-le sur une valeur différente.
  2. utilisation #IF ESSAI pragma pour spécifier la chaîne de connexion correcte à la compilation
2

bidouiller avec le web.config peut un processus qui est sujette à l'erreur ... sauf si vous utilisez web.config Transformations qui est.

Je créerais une nouvelle configuration, "Test" pour votre projet dans Visual Studio ... il peut s'agir d'une copie de votre configuration de développement existante (ou Debug/Release, peu importe). Ensuite, cliquez avec le bouton droit sur votre fichier Web.config dans l'Explorateur de solutions et cliquez sur Ajouter des modifications de configuration. Suivez les instructions here sur la façon d'écrire un fichier de transformation. Si vous ne devez modifier la chaîne de connexion EF pour l'environnement de test, il ressemblerait à quelque chose comme ça dans 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> 

Assurez-vous de construire dans la configuration correcte lorsque vous voulez pour exécuter vos tests.

Configuration Manager

Il y a aussi un Visual Studio Add-in SlowCheetah Ce qui rend ce processus très transparent depuis l'EDI.

+0

+1 pour SlowCheetah –

+0

@SayedIbrahimHashimi +1 pour être le gars qui a "écrit le livre" sur MS Build et beaucoup d'outils qui facilitent mon travail. Merci pour ça. –

+0

Vous êtes les bienvenus :) –

Questions connexes