2009-03-03 62 views
0

我真的不知道如何制定標題。 但這是我的問題。 我們使用SqlCacheDependencies來更新緩存對象。但是,這背後的疑問是「複雜的」,我們想讓它更容易一些。用於指示更改的SQL列名

我們的第一個想法是添加一個像DateChanged這樣的字段名,並使用DateChanged來檢查一個對象是否實際上已經改變,而不是加載一個表的所有列。

SELECT DateChanged FROM Table1 

SELECT Id, Title, DateChanged, Description FROM Table1 

但我希望有人能告訴我,如果有其他的方法來做到這一點,或者如果有命名,指示更改列標準代替。 框架像「實體框架」或「NHibernate」如何處理?

回答

1

這些都是我的 「審計」 實體使用的列:

version: hibernate's optimistic concurrency control 
createdBy: FK to users 
modifiedBy: FK to users 
createdAt: timestamp 
modifiedAt: timestamp
0

如果您使用的是SQL Server,請注意時間戳列有點誤導性地命名。雖然它可以用來跟蹤對列的更改,但它的值與日期或時間無關。它可以被認爲是數據庫中的唯一ID,僅此而已。 http://msdn.microsoft.com/en-us/library/aa260631.aspx

爲了知道是否發生了變化,您需要兩個timstamps,如cherouvim的答案。一個是在創建對象時設置的,另一個是在任何修改時設置的,可能是通過更新觸發器。如果它們不同,則該對象已被編輯,但不能準確地確定何時。

在SQL Server上,您必須使用相同的模式,但使用日期時間列。然後,您可以通過從mod日期減去創建日期來計算該行的日期。

+0

我不認爲你需要兩個時間戳。緩存的數據將具有時間戳值,並且可以將其與數據庫中的當前時間戳值進行比較。如果它們匹配,則自該行被緩存起,不會對數據庫進行進一步的更新。 – MikeW 2009-03-03 09:21:48