Событие onchange SqlTableDependency не запускается

у меня проблема с SqlTableDependency. Мой измененный метод не вызывается, когда я делаю вставку/обновление/удаление в желаемую таблицу. Событие OnStatusChanged работает нормально.

 string conn = @"data source=secret server; integrated security=True; initial catalog=secret db;User id=secret user";

    var mapper = new ModelToTableMapper<SqlDataModel>();

    mapper.AddMapping(c => c.datavalue, "datavalue");       

    using (var dep = new SqlTableDependency<SqlDataModel>(conn, "data", mapper))
    {
        dep.OnChanged +=  Changed;
        dep.OnStatusChanged += OnStatusChanged;
        dep.OnError += OnError;
        dep.TraceLevel = TraceLevel.Verbose;
        dep.TraceListener = new TextWriterTraceListener(Console.Out);            
        dep.Start();          

        Console.WriteLine("Press a key to exit");           
        Console.ReadKey();            
        dep.Stop();
    }
}
static void OnStatusChanged(object sender, StatusChangedEventArgs e)
{
    Console.WriteLine(e.ToString());
}
static void OnError(object sender, ErrorEventArgs e)
{
    Console.WriteLine(e.ToString());
}
static void Changed(object sender, RecordChangedEventArgs<SqlDataModel> e)
{      
    if (e.ChangeType != ChangeType.None)
    {
        var changedEntity = e.Entity;
        Console.WriteLine("DML operation: " + e.ChangeType);          
        Console.WriteLine("value: " + changedEntity.datavalue);
    }
}

Приведенный выше код я основан на https://tabledependency.codeplex.com/wikipage?title=SqlTableDependency Я уверен, что у меня есть и я использую роль db_owner. Я включил брокера, я вижу, что триггеры, службы и т. д. создаются в базе данных mssql.

введите описание изображения здесь


person Kuba Wenta    schedule 15.12.2016    source источник
comment
Обратите внимание, что SqlTableDependency теперь находится на github.com/christiandelbianco/.   -  person Christian Del Bianco    schedule 09.08.2017


Ответы (2)


Наконец-то я обнаружил ошибку в своей таблице sys.transmission_queue: произошло исключение при постановке сообщения в целевую очередь. Ошибка:

15517, Состояние: 1. Невозможно выполнить в качестве участника базы данных, поскольку принципал "dbo" не существует, этот тип участника не может быть олицетворен или у вас нет разрешения.

Несмотря на то, что к базе данных я уже дал себе полное разрешение, мне еще предстояло это сделать.

ALTER AUTHORIZATION ON DATABASE::secret db TO sa
person Kuba Wenta    schedule 27.12.2016
comment
Что это делает? - person Marcus; 01.08.2018
comment
Я думаю, что это просто установило владельца базы данных sa - person Kuba Wenta; 02.08.2018
comment
кто-нибудь может объяснить, почему это не работает, не сделав sa владельцем. Я хочу сохранить другого пользователя в качестве владельца. - person Prasad Lakmal; 26.04.2019

Также проверьте раздел «Примечание об уровне совместимости и версии базы данных для отслеживания изменений записей», https://github.com/christiandelbianco/monitor-table-change-with-sqltabledependency.

Даже если ваш экземпляр SQL Server — это SQL Server 2008 R2 или более поздние версии, возможно, ваша база данных была создана с использованием старой версии SQL Server, например SQL Server 2005.

person mmam    schedule 11.10.2019