Some Background ...
ELMAH предназначен для регистрации ошибок в указанном источнике журнала .Наиболее распространенным источником журнала является класс SqlErrorLog
, который регистрирует ошибки в базе данных SQL Server и является частью базовой библиотеки ELMAH.Но есть и другие доступные источники журналов, которые регистрируют ошибки по адресу электронной почты, XML-файлу, базе данных Oracle и т. Д.
Порядковый номер, на который вы ссылаетесь, специфичен для SqlErrorLog
учебный класс.Если вы посмотрите на другие источники журналов, такие как XmlFileErrorLog
, вы увидите, что понятие порядкового номера отсутствует.
Учитывая это, неудивительно, что класс ELMAH Error
- что представляет собой ошибку - не имеет свойства Sequence
.«Последовательность» - это нечто конкретное для источника журнала SqlErrorLog
.(Это можно увидеть далее, если вы изучите сценарий T-SQL, использованный для создания объектов базы данных для источника журнала SqlErrorLog
- поле Sequence
является столбцом IDENTITY
и поэтому автоматически вычисляется базой данных при вставке.Это не значение, предоставляемое ELMAH.)
Возможное решение ...
MichaelvR предложил изменить исходный код ELMAH, но я бы предложил против этого, так как если вы это сделаете, вы будетепривязка вашей ветви ELMAH к определенному источнику журналов.Вместо этого возможно менее элегантное (и более простое!) Решение в следующем порядке:
- Создайте обработчик событий
ErrorLog_Logged
в Global.asax
, как вы описали, - Считайте ошибку
Id
значение (GUID) только что возникшей ошибки, - Подключитесь к базе данных и напрямую запросите таблицу
ELMAH_Error
.
Вот пример запроса:
SELECT Sequence
FROM ELMAH_Error
WHERE ErrorId = TheErrorIdOfTheJustLoggedError
Что вы думаете об этом обходном пути?
Счастливого программирования!