我想通过 Dapper 在 MySQL 中删除并创建一个数据库,如下所示:
public class GenericSqlExecutionRepository
{
private IDbConnection _db;
public void RecreateDb()
{
_db.Execute("DROP DATABASE IF EXISTS `my_db`;");
_db.Execute("CREATE DATABASE `my_db`;");
}
}
删除数据库工作得很好,但是当尝试执行创建数据库时:
"Unknown database 'my_db'"
at MySql.Data.MySqlClient.MySqlStream.ReadPacket() at MySql.Data.MySqlClient.NativeDriver.ReadOk(Boolean read) at MySql.Data.MySqlClient.NativeDriver.SetDatabase(String dbName) at MySql.Data.MySqlClient.Driver.SetDatabase(String dbName) at MySql.Data.MySqlClient.MySqlConnection.ChangeDatabase(String databaseName) at MySql.Data.MySqlClient.MySqlConnection.Open() at Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action'2 paramReader) at Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command) at Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable'1 commandTimeout, Nullable'1 commandType)
当然,我的 IDbConnection
绑定(bind)到单个数据库(在连接字符串中指定)。那么:是否可以绕过这个问题并通过 Dapper 进行 drop+create ?
其他信息
var _db
的生成方式如下:
public static MySqlConnection GetConnection(string connectionStringId)
{
var connectionString = ConfigurationManager.ConnectionStrings[connectionStringId].ConnectionString;
var connection = new MySqlConnection();
connection.ConnectionString = connectionString;
return connection;
}
这是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"/>
最佳答案
看起来只需从连接字符串中删除 Database=my_db;
,Dapper 就可以了:
<add name="myDbId" connectionString="Server=localhost;Port=3306;User=yyyyyyy;Password=zzzzzzz;Convert Zero Datetime=True;Compress=True;" providerName="System.Data.SqlClient"/>
现在两个查询都可以工作。
关于c# - 是否可以通过 Dapper 删除+创建模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39848025/