2017-09-11 4 views
0

J'essaie de trouver un moyen de changer le nom de la base de données dans mon web.config et mon contexte. Aucune autre information dans ma chaîne de connexion ne change mais le nom de la base de données.Comment changer le nom de la base de données dans Entity Framework

public APIContext(string dbname = "MyFirstDB") : base("OriginalContext") 
{ 
    this.Database.Connection.ConnectionString = this.Database.Connection.ConnectionString.Replace("MyFirstDB", dbname); 
} 

La seule façon que je peux trouver pour y parvenir est de remplacer le nom, mais je peux voir quelques problèmes à l'avenir, par exemple si je dois revenir en arrière ou besoin de pointer vers une autre base de données. En utilisant mysql.

Toute aide sera appréciée.

** EDIT **

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] 
public class APIContext : DbContext 
{ 
    public APIContext() : base("MyContext") 
    { 
    } 

    public void setDatabaseName(string name) 
    { 
     var currentdatabase = this.Database.Connection.Database; 
     this.Database.Connection.ConnectionString = this.Database.Connection.ConnectionString.Replace(currentdatabase, name); 
    } 

Est-ce que ce travail si je devais appeler la méthode « setDatabaseName (nom de la chaîne) » avant d'appeler ma classe de contexte?

Je suis juste confus sur où je devrais remplacer le nom de base de données et comment le faire.

+0

* cela fonctionnerait-il * pourquoi ne pas essayer et voir si cela fonctionne? Je veux dire qu'il est plus rapide de l'essayer que de demander ici et d'attendre une réponse. Pourquoi ne peux-tu pas juste changer le nom de la chaîne de connexion dans le fichier de configuration: 'Database = whateverDb'? – CodingYoshi

+0

J'ai essayé ce Yoshi. Où je suis confus est comment le configurer et où j'ai besoin de changer le nom de la base de données dans la chaîne de connexion. Après avoir frappé ma base de données initiale, j'obtiens un nom de base de données, et je voudrais passer à cette base de données. Je ne sais pas comment le faire. – brachen33

+1

Voir [cette réponse] (https://stackoverflow.com/a/20294903/4228458) – CodingYoshi

Répondre

1

Avez-vous essayé?

public partial class MyModel : DbContext 
    { 
    public MyModel() 
       : base("name=MyModelDataContext") // <-- ConnString Name 
      { 
      } 
} 

Et votre connString ressemble à ceci

<add name="MyModelDataContext" connectionString="data source=... initial catalog=YOURDB 

De cette façon, vous pouvez changer votre nom db tout moment.

c'est en fait comment le code premier assistant de la base de données génère il

+0

Merci Victor, mais c'est là que je suis confus. Comment est-ce que je change juste le nom de base de données avec ceci? – brachen33

+0

ok, ce qui est codé en dur ici est le nom connstring, le ** nom de la base de données ** est dans le web.config, dans mon code exemple c'est Initial Catalog = ** YOURDBNAME ** car le web.config est modifiable à tout moment, cela signifie que votre nom de base de données peut être modifié à tout moment. –

+0

Merci encore Victor. Mais quel est mon meilleur pari sur le changement du nom de DB? Je passe mon web.config à l'aide de 'Initial Catalog = ""' au lieu de 'Database = ""'. Comment pourrais-je changer ce nom de base de données sans utiliser de remplacement? – brachen33

0

Ok, si vous voulez utiliser plus d'un, vous pouvez le faire connString

public class MyModel : DbContext 
{ 
    public MyModel() 
     : base(ApplicationParameters.ConnectionStringName) 
    { 
    } 

    public MyModel (string connectionStringName) 
     : base(connectionStringName) 
    { 
    } 

} 

Ensuite, dans votre web.config vous pouvez définir une liste de connexions et dans votre code vous pouvez appeler n'importe lequel d'entre eux avec le second constructeur.