2011-02-13 98 views
1

我使用Elmah和Log4Net(使用ADONetAppender),它們都很棒。但是,我注意到兩者都有一個表ID鍵(遞增數字),當我清除日誌時它不會重置爲零。他們從哪裏得到這個ID值?另外,是否有任何理由讓log4net列不要爲ID值使用主鍵,或者如果我添加一個,我會遇到麻煩嗎?身份證在哪裏存儲?

回答

1

我懷疑這是數據庫中ID字段上的一個auto increment指令,因爲當您刪除條目時,只有在截斷(請糾正我,我不確定它)時,此值不會重置爲零。嘗試直接重置數據庫中的表,而不是使用記錄器基礎結構。

+0

嗯...有趣。什麼是截斷與刪除?我知道刪除作爲ol的SQL函數,但從來沒有聽說過截斷。 – Maharaja

+0

刪除會說'從表中刪除,這只是清除整個表,運行時將是O(n)。我不太確定truncate是如何工作的,但我認爲你可以想象它是刪除整個表而不是刪除所有記錄,然後重新創建它。 – Femaref

+0

截斷通常更有效,因爲它不會將每個已刪除的記錄記錄到事務日誌中 – Amy

1

如果您使用Microsoft SQL Server,那麼你可以使用DBCC CHECKIDENT語句,像這樣重的IDENTITY列種子:

DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) 

例如,在ELMAH_Error表的IDENTITY列重置爲1你將一個值使用:

DBCC CHECKIDENT (ELMAH_Error, RESEED, 1) 

快樂編程!