變化跟蹤我有兩個應用,一個一個ASP.NET網站與用戶界面,再進行第二次C#應用程序以供執行的調度作業。我在C#應用程序中更改跟蹤時遇到問題,因此它可以響應用戶對數據庫的更新。其基本思路是這樣的:SQL Server 2008中的C#客戶
用戶通過ASP.NET網站添加一個新行到產品數據庫。然後應該通知C#應用程序新行,並且它會產生一個Quartz.NET作業來處理這個新創建的產品。如果產品詳細信息被更新,C#應用程序會得到通知並適當地更新Quartz.NET作業。
僞代碼:
while(true) // it's not really a loop like this, but this suffices
{
var newProducts = from p in dc.Products where Added_On > DateTime.Now;
foreach(Product product in newProducts)
CreateNewJob(product);
}
然後,需要跟蹤更改它的每個作業的個別欄:
void Execute(...)
{
var product = from p in dc.Products where Id == this._product.Id;
if (CompareProduct(this._product, product) == false)
_product = product;
// do work with the product
}
或時間戳:
void Execute(...)
{
var updated = from p in dc.Products where Id == _product.Id && Updated_On > DateTime.Now;
if (updated != null)
_product = updated;
}
由於往往比不是,產品不會改變,是否有更好的解決方案,而不是每次都查詢更改執行?
的要求是,如果數據發生了變化,Quartz.NET工作不應與陳舊的數據執行。在Execute()開始時,它應該是最近的更改。如果狀態在執行期間改變,那也可以。
我看過的SqlDependency,但一切我讀過說,它不會告訴你發生了什麼變化,只是事情發生了轉變。對於一個大型數據庫來說,不斷拉下整個桌子似乎是不可行的,並且自己做比較。
更改跟蹤也似乎可能是低效的。我不得不將所有更改都拉下來,找到與更改的項目相對應的Quartz.NET作業,並使用最新的數據進行更新。
是的,我懷疑這是最簡單的方法。謝謝。如果想知道更改了什麼,鎖定工作以更新它們等,通知會非常困難。 – mfanto 2011-02-14 04:25:59