|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
День добрый! Веб интерфейс к <Д, MVC 5, EF при вставке в табличку, получаю из триггера (T-SQL) ошибку (там reiaserror с внятным текстом в сообщении, типа "нельзя записать значение - потому что...."). В Exception вижу "An error occurred while updating the entries. See the inner exception for details." При отладке в exc.InnerException я вижу то же самое сообщение, а вот в нем еще один InnerException и там в message то самое сообщение, что мне нужно. Учитывая, что вставки могут быть каскадными и может ругнуться триггер не самой таблицы а дочерней например, как гарантированно запрать текст ошибки и не получать этот "An error occurred while updating the entries. See the inner exception for details."? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 10:10 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovichУчитывая, что вставки могут быть каскадными и может ругнуться триггер не самой таблицы а дочернейвы думаете вложенность будет увеличиваться? Думаю нет, т.к. я сам разворачиваю максимум второй уровень)). Проверьте. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 10:24 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovichВеб интерфейс к <Д, MVC 5, EF при вставке в табличку, получаю из триггера (T-SQL) ошибку (там reiaserror с внятным текстом в сообщении, типа "нельзя записать значение - потому что....") Да пусть уж триггер возвращает сразу HTML там или картинку с оформленным сообщением об ошибке и кнопки с логикой, чего мелочиться ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 10:26 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
все очень просто..валидацию делать на уровне приложения субд лишь хранилище ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 10:36 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
handmadeFromRuвсе очень просто..валидацию делать на уровне приложения субд лишь хранилище ну, триггер он переборщил, а ошибку по FK, data not found вполне Могут быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 10:47 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovichкак гарантированно запрать текст ошибки и не получать этот "An error occurred while updating the entries. See the inner exception for details."? очень просто, спускаться вниз пока существуют inner exception, и забрать текст последней ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 11:08 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
Petro123handmadeFromRuвсе очень просто..валидацию делать на уровне приложения субд лишь хранилище ну, триггер он переборщил, а ошибку по FK, data not found вполне Могут быть. максимально ток по коду, и то очень и очень спорно, но уж точно не текст ошибки из БД, это конкретный зашквар и стыдобище. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 12:03 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
hVostt, Согласен. В веб проектах особенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 12:09 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
hVosttPetro123пропущено... ну, триггер он переборщил, а ошибку по FK, data not found вполне Могут быть. максимально ток по коду, и то очень и очень спорно, но уж точно не текст ошибки из БД, это конкретный зашквар и стыдобище. Покупная система, много логики в триггерах, каскадные апдейты на другие таблицы. Часть можно дорабатывать, часть нет. Родной клиент - нельзя, и он выдает именно эти ошибки, которые ему возвращают из Raiserror. Иногда с ней надо общаться посредством вэб приложения, валидизировать в нем - это переписать все эти триггера уже в Linq и поддерживать их идентичность. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 13:26 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovich, Кому счас легко? Зачем вам ОРМ, если старая система? С чего взяли что каскад что то заворачивает во вложенность? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 13:35 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovichПокупная система,вечный вопрос, как поддерживать зооппарк систем. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 13:37 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovichДень добрый! Веб интерфейс к <Д, MVC 5, EF при вставке в табличку, получаю из триггера (T-SQL) ошибку (там reiaserror с внятным текстом в сообщении, типа "нельзя записать значение - потому что...."). В Exception вижу "An error occurred while updating the entries. See the inner exception for details." При отладке в exc.InnerException я вижу то же самое сообщение, а вот в нем еще один InnerException и там в message то самое сообщение, что мне нужно. Учитывая, что вставки могут быть каскадными и может ругнуться триггер не самой таблицы а дочерней например, как гарантированно запрать текст ошибки и не получать этот "An error occurred while updating the entries. See the inner exception for details."? А что Вы с этим текстом делать-то собрались? Пользователю показывать? А пользователь с ним что будет делать? Срин снимать и в поддержку отсылать? А поддержка пинать разработчиков? Пишите исключения в лог и будет вам счастье. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 13:44 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovichПокупная система, много логики в триггерах, каскадные апдейты на другие таблицы. Часть можно дорабатывать, часть нет. Родной клиент - нельзя, и он выдает именно эти ошибки, которые ему возвращают из Raiserror. Иногда с ней надо общаться посредством вэб приложения, валидизировать в нем - это переписать все эти триггера уже в Linq и поддерживать их идентичность. Да понятно всё это.. легаси, овноход, ракитехтура... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 14:26 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
skyANAА что Вы с этим текстом делать-то собрались? Пользователю показывать? А пользователь с ним что будет делать? Срин снимать и в поддержку отсылать? А поддержка пинать разработчиков? Пишите исключения в лог и будет вам счастье. В общем да - если оно непонятно ему самому (они бывают вполне понятны) то да скрин - сервисдеск, и хотелось бы, чтобы этот скрин мне самому чтото дал, а не пришлось бы звонить, повторять действия на тестовой, ловить профилером и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 14:39 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
Petro123denis_viktorovich, Зачем вам ОРМ, если старая система? С чего взяли что каскад что то заворачивает во вложенность? 1. Хороший вопрос. Наверное вот в таких случаях (триггера, каскадные апдейты) проще записывать данные хранимкой, привычно возвращать ошибку и только там где этого нет, можно применять ОРМ, но все проверки делать не в базе, а в EF. 2. В отладчике увидел иннерэсепшн, в нем еще один и только там ошибка из триггера. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 14:47 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovich, 1. Почему вы каскад употребляете в одно ряду с триггером? ОРМ работает с каскадом штатно. Либо сам, либо говорит о каскаде базе. А триггер это не для ОРМ. 2. Где скрин ошибки? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 14:53 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovich, Кстати что за каскадный апдейт? Первичного ключа? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 14:55 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovichВ общем да - если оно непонятно ему самому (они бывают вполне понятны) то да скрин - сервисдеск, и хотелось бы, чтобы этот скрин мне самому чтото дал, а не пришлось бы звонить, повторять действия на тестовой, ловить профилером и т.д. и т.п. Может быть: 1. делать проверки до выполнения действия? не во время выполнения действия, а до. -- если логика проверки (так случилось) находится в БД, то почему бы не вызывать функцию, возвращающую результат в табличном виде, с текстами ошибок, а затем уже выполнять действие 2. валидация в ПО максимально где это возможно 3. ошибки писать в лог, максимально подробно, ещё всю операцию сопровождать трассировочным идентификатором, и/или вложенные контексты в журнале ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 15:56 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
Petro123denis_viktorovich, Кстати что за каскадный апдейт? Первичного ключа? Нет, когда в триггере Before или Instead кроме проверок выполняется апдейт связанных таблиц (простановка параметров, неких счетчиков и т.д.). И этот апдейт тоже вызывает цепочку проверок, которая может закончится ошибкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 16:26 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
hVosttdenis_viktorovichВ общем да - если оно непонятно ему самому (они бывают вполне понятны) то да скрин - сервисдеск, и хотелось бы, чтобы этот скрин мне самому чтото дал, а не пришлось бы звонить, повторять действия на тестовой, ловить профилером и т.д. и т.п. Может быть: 1. делать проверки до выполнения действия? не во время выполнения действия, а до. -- если логика проверки (так случилось) находится в БД, то почему бы не вызывать функцию, возвращающую результат в табличном виде, с текстами ошибок, а затем уже выполнять действие 2. валидация в ПО максимально где это возможно 3. ошибки писать в лог, максимально подробно, ещё всю операцию сопровождать трассировочным идентификатором, и/или вложенные контексты в журнале В данном случае сделал проверку до вставки (тут это было просто), там, где непросто наверное буду юзать хранимки. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 16:29 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovichPetro123denis_viktorovich, Кстати что за каскадный апдейт? Первичного ключа? Нет, когда в триггере Before или Instead кроме проверок выполняется апдейт связанных таблиц (простановка параметров, неких счетчиков и т.д.). И этот апдейт тоже вызывает цепочку проверок, которая может закончится ошибкой.тогда весь твой топик в топку. БД и EF не будет в цикле заворачивать такие ошибки во вложенные. Закрывай топик. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 16:49 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
denis_viktorovich, Перебрать InnerException-ы и найти самый последний, от туда взять текст ошибки вот так: Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 10:40 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
Туман войны, Интересный вопрос был в том, что глубина не больше 2х для рекурсии. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 11:31 |
|
EF, вытащить текст ошибки (из триггера)
|
|||
---|---|---|---|
#18+
Триггеры вообще в топку. Максимум для чего - это логгирование/аудит. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 11:57 |
|
|
start [/forum/topic.php?fid=18&msg=39759205&tid=1355044]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
131ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 233ms |
0 / 0 |