2016-12-15 159 views
4

我有一个SqlTableDependency问题。当我插入/更新/删除欲望表时,我的改变的方法不会被调用。 OnStatusChanged事件工作正常。未激发SqlTableDependency onchange事件

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数据库中创建了trigers,services等。

enter image description here

+2

请注意,现在SqlTableDependency是https://github.com/christiandelbianco/monitor-表变化与-sqltabledependency –

回答

4

我finnally发现错误在我sys.transmission_queue表: 而在目标队列入队的消息时发生异常。错误:

15517, State: 1. Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.

即使数据库已经我给自己充分的权限,我还没有做

ALTER AUTHORIZATION ON DATABASE::secret db TO sa