Я пытаюсь получить уведомления о зависимости от 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
, указанное в Профилировщике SQL Server, с текстом, включающим 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-программирования / использование-и-мониторинга-sql-2005-запрос-уведомление / должна быть запись с другим текстом в случае сбоя подпискизарегистрироваться, но это даже не так, поэтому кажется, что запрос даже не получен сервером.
Пожалуйста, кто-нибудь может сказать мне, что я сделал неправильно, или указать мне в правильном направлении.