2016-12-15 157 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