2015-07-20 54 views
0

下面是我的環境設置後處理在SQL Server中插入行後

  • SQL Server 2008 R2的
  • ASP.NET MVC
  • 實體框架

在我的應用程序我想在事務被插入數據庫之後進行事後處理。所以基本上我想要一個單獨的應用程序來監聽數據庫事件,並且在表Orders中創建新行時,執行一些後處理(調用另一個webservice來處理訂單)。

我使用EF進行了檢查,似乎它沒有提供任何此類功能。

很少有其他要求

  • 在這個時候我不是在尋找涉及投票,因爲它會增加數據庫負載的解決方案。
  • 想要插入某一行時觸發某種事件。

達到相同的最佳方式是什麼?

回答

0

在該表上創建一個T-SQL觸發器,該觸發器向所有相關信息(例如OrderId和可能其他人)插入一個單獨的「Command」表中的一個小「命令」條目。

然後讓您的獨立應用程序定期檢查「Command」表(定期檢查每10分鐘 - 或任何對您有意義的事情)。

根據從「Command」表中讀取的數據,您的應用程序可以進行必要的後處理,並使用新信息更新底層數據庫表。

警告切勿把所有的後期處理邏輯直接插入扳機!這將是一個基本的罪 - 一個觸發器應該從不做沉重而冗長的處理,因爲它阻止當前正在運行的事務並且肯定會殺死你的數據庫的系統性能

+0

我不想做輪詢的配置,我一直在尋找更多種類的事件。 –

0

您可以使用服務總線,如MassTransit。將其配置爲使用它的Subscription服務。

保存訂單後,在公交車上舉起一個事件,並讓另一個服務監聽此事件。一旦其他服務提取事件,您可以繼續處理訂單。

這是MassTransit主頁 http://masstransit-project.com/

這是訂閱服務 http://docs.masstransit-project.com/en/latest/overview/publishing.html

+0

你能指點我一些鏈接嗎? –

+0

@AnshulNigam請參閱我的答案中的增加信息 – 3dd

+0

我閱讀了文檔,它更有可能創建自己的隊列,然後在外面處理,聽起來不錯,但請記住,但目前正在從sql server本身尋找一些內部事件。 –