SQL依存関係通知をLINQで機能させようとしています。
ハードコードされたコマンドテキストで成功しました:
using (SqlConnection conn = new SqlConnection(ConnStr))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT [t0].[discounttype] FROM [dbo].[discounts] AS [t0]";
var dep = new SqlDependency(cmd);
dep.OnChange += OnDataChange;
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read()) { Console.WriteLine("Name = " + dr[0]); }
}
}
QN: Subscription
SQLServerプロファイラーに。を含むテキストでリストされたイベントが表示されますsubscription registered
。その後はすべて問題ありませんdiscounts
。テーブルに変更が加えられると通知されます。
ただし、LINQを使用して同じクエリを実行すると、次のようになります。
using (TestNotifyDataContext dc = new TestNotifyDataContext(ConnStr))
{
var results = from d in dc.Discounts select d;
SqlCommand cmd = (SqlCommand) dc.GetCommand(results);
var dep = new SqlDependency(cmd);
dep.OnChange += OnDataChange;
List<Discount> table = results.ToList();
foreach (var discount in table)
{
Console.WriteLine("L: " + discount.discounttype);
}
}
results
は正しく返さQN: Subscription
れますが、プロファイラーにはイベントがありません(したがって、変更に関する通知は届きません)。http://www.simple-talk.com/sql/t-sql-programming/using-and-monitoring-sql-2005-query-notification/によると、サブスクリプションの登録に失敗した場合は、異なるテキストのエントリが必要です。しかし、それすらないので、サーバーがリクエストを受信していないようです。
誰かが私が間違ったことを教えてくれるか、正しい方向に私を向けてください。