可能な限りLINQを使用しようとしているので、これを理解したいと思います。Mapping.GetTables() 列挙子を使用せずに、DataContext ExecuteQuery メソッドを使用して、ユーザーが選択したサーバー/データベース内のテーブルのリストを取得できます。
これが私が持っているものです(BackgroundWorker.RunWorkerAsync(args)によって呼び出されます):
//Build the connection string (args contains the Server and database names)
Dictionary<string, string> args = (Dictionary<string, string>)e.Argument;
string ConnectString = "Data Source=" + args["SqlServerHolder"] + ";Integrated Security=True;Initial Catalog=" + args["SqlServerDatabaseHolder"];
//Get the connection and pull the list
using (SqlConnection con = new SqlConnection(ConnectString))
{
// Open connection
con.Open();
//create a linq connection and get the list of database names
DataContext dc = new DataContext(con);
//THIS WORKS
e.Result = new ObservableCollection<string>(dc.ExecuteQuery<string>("SELECT [name] FROM sysobjects WHERE xtype='U'").AsEnumerable());
//THIS COMES BACK EMPTY (tables)
IEnumerable<string> tables = (from mt in dc.Mapping.GetTables() select mt.TableName);
e.Result = new ObservableCollection<string>(tables);
}
ハードコーディングされたクエリの実行は機能しますが、それを避けるために GetTables() メソッドを使用したいと思います。私が考えることができる唯一のことは、データベースがその場でそのように接続されており、何らかの形でマッピングを設定する必要があるということですか?
ありがとうアーニー