0

可能な限り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() メソッドを使用したいと思います。私が考えることができる唯一のことは、データベースがその場でそのように接続されており、何らかの形でマッピングを設定する必要があるということですか?

ありがとうアーニー

4

1 に答える 1

0

Linq-to-sql には、ORM 機能を処理するためのコードが必要です。厳密に型指定されたクラスで動作します。

ここで、ランダムなデータベースを選択して、使用可能なマッピングがないため結果がありません。つまり、ランダム データベースの DBML はありません。

もう 1 つのステートメントは単純な SQL であるため、任意のランダム データベースで機能しますが、厳密に入力されたものはすべて返します。

于 2013-04-13T09:57:42.233 に答える