我正在使用带有C#的Entity Framework 6(EF6)。我试图编写一个DB不可知查询来获取所有数据库名称列表。
例如:
与SQL Server存在类似
的内容select * from master.sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
使用MySQL
SHOW DATABASES
与Postgres,Oracle等等等。
所以问题是EF6是否提供了一种通过特定数据库独立获取此列表的方法。
答案 0 :(得分:0)
你可以这样做:
public bool TestConnection(string connString, List<string> databases) {
using (context = new DatabaseContext(connString)) {
if (!context.Database.Exists())
return false;
string query = "select * from master.sys.databases WHERE name NOT IN('master', 'tempdb', 'model', 'msdb')";
var connection = context.Database.Connection;
DataTable dt_databases = new DataTable();
SqlDataAdapter dataAdapter = new SqlDataAdapter(query, connection.ConnectionString);
dataAdapter.Fill(dt_databases);
// Getting name from each dataRow
foreach (DataRow dr in dt_databases.Rows)
databases.Add(dr.ItemArray[0].ToString());
return true;
}
}
如果您只想要数据库的名称,可以像这样构建查询:
string query = "select name from master.sys.databases WHERE name NOT IN('master', 'tempdb', 'model', 'msdb')";