2016-10-04 1 views
0

Je voudrais déposer et de créer une base de données MySQL via Dapper comme ceci:Est-il possible de supprimer + créer un schéma via Dapper?

public class GenericSqlExecutionRepository 
{ 
    private IDbConnection _db; 

    public void RecreateDb() 
    { 
     _db.Execute("DROP DATABASE IF EXISTS `my_db`;"); 
     _db.Execute("CREATE DATABASE `my_db`;"); 
    } 
} 

base de données drop fonctionne très bien, mais whe tente d'exécuter la base de données créer:

« base de données inconnue ' my_db ' »

à MySql.Data.MySqlClient.MySqlStream.ReadPacket() à MySql.Data.MySqlClient.NativeDriver.ReadOk (Boolean read) à MySql.Data.MySqlClient.NativeDriver.SetDatabase (String dbName) à MySql.Data.MySqlClient.Driver.SetDatabase (String dbName) à MySql.Data.MySqlClient.MySqlConnection.ChangeDatabase (String databaseName) à MySql.Data.MySqlClient.MySqlConnection.Open() à Dapper.SqlMapper.ExecuteCommand (IDbConnection cnn, commande CommandDefinition &, Action'2 paramReader) à Dapper.SqlMapper.ExecuteImpl (IDbConnection cnn, commande CommandDefinition &) à Dapper.SqlMapper.Execute (IDbConnection cnn, SQL String, Object param, IDbTransaction transaction, Nullable » 1 commandTimeout, Nullable'1 commandType)

Bien sûr, mon IDbConnection est lié à une seule base de données (spécifiée dans la chaîne de connexion). Donc: est-il possible de contourner ce problème et de faire le drop + create à travers Dapper?


INFOS SUPPLÉMENTAIRES

Le var _db est généré comme ceci:

public static MySqlConnection GetConnection(string connectionStringId) 
{ 
    var connectionString = ConfigurationManager.ConnectionStrings[connectionStringId].ConnectionString; 
    var connection = new MySqlConnection(); 
    connection.ConnectionString = connectionString; 

    return connection; 
} 

C'est la chaîne de connexion dans App.config:

<add name="myDbId" connectionString="Server=localhost;Port=3306;Database=my_db;User=yyyyyyy;Password=zzzzzzz;Convert Zero Datetime=True;Compress=True;" providerName="System.Data.SqlClient"/> 

Répondre

0

Il ressemble simplement enlever Database=my_db; de la chaîne de connexion, Dapper est OK avec ça:

<add name="myDbId" connectionString="Server=localhost;Port=3306;User=yyyyyyy;Password=zzzzzzz;Convert Zero Datetime=True;Compress=True;" providerName="System.Data.SqlClient"/> 

Maintenant, les deux requêtes fonctionnent.

+0

Cela a été l'erreur suggère également qu'il échouait à une tentative d'utilisation de l'objet de connexion Invalide, puisque la base de données sous-jacente a été abandonnée –