|
Как получить RETURN и поймать RAISERROR (severity <10) хранимки в Entity Framework
|
|||
---|---|---|---|
#18+
Привет. Я облазил инет. Но не сумел достаточно быстро найти ответ на поставленный вопрос. А точнее два вопроса. Напишу их для удобства ответов: 1. Как получить RETURN из хранимой процедуры? Какие настройки в модели надо сделать? 2. Каким образом из модели EF можно получить сообщение ошибки raiserror у которой уровень ошибки 10 и ниже. PS: Я начитался вариантов с OUTPUT параметрами, селектами и тд. Смысл вопроса не в том, чтобы в принципе решить задачу хоть каким-то способом (хоть каким-то я умею). А решить ее так, как предусматривает MS SQL, что многие другие фреймворки-таки соблюдают, и не приходится городить отсебятину. PPS: Ответ "это в принципе в EF не возможно", меня тоже наверное устроит. Ну если не умеет так именно EF (а не программист, который просто не знает как правильно), то и нет смысла дальше париться. Спасибо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2020, 16:36 |
|
Как получить RETURN и поймать RAISERROR (severity <10) хранимки в Entity Framework
|
|||
---|---|---|---|
#18+
Боролся с этой же проблемой, а именно: пытался заставить EF понять что возвращает SP. И выяснил вот что: при мапировании модели EF получает метаданные о SP, из которых выбирает что-то одно. Т.е. если SP возвращает несколько НД (не говоря о коде возврата, который возвращается всегда), то EF "распознает" только один из SELECTов, которые есть в теле хранимки - по нему и строится модель (класс) и код контекста. Если SELECT отсутствует (SP использует EXEC), то класс не создается, а в контексте соотв. процедура возвращает int (т.е. код возврата). Для нескольких НД в качестве класса берется только один (обычно - последний). Остальные надо вытягивать ручками, используя ObjectQuery.NextResult, что неудобно ибо нет явной привязки к соотв. модели, - опять-таки в дело вступают "ручки". И это не единственный недостаток EF (о нем, кстати, явно написано в BOL). Попробуйте "штатными" средствами EF поиграться с транзакциями или "поймать" EXCEPTION с SQL-сервера. Вывод : используйте EF как костяк своей ORM, но при этом всякие штучки типа обработки нескольких НД, исключений на стороне SQL Server, управление транзакциями и т.д. добавляйте в репозиторий, используя, например, SQLClient Как-то так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 22:12 |
|
Как получить RETURN и поймать RAISERROR (severity <10) хранимки в Entity Framework
|
|||
---|---|---|---|
#18+
_Промешан_, У EF задача простая. Это ORM и точках. Поэтому, если вас эти рамки ORM не устраивают, вам лучше посмотреть в сторону микро-орм, чтобы иметь возможность получать типизированные результаты запросов. Но и иметь полную свободу при работе с БД. Но не забывайте, что за всё нужно платить :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 23:59 |
|
|
start [/forum/topic.php?fid=17&fpage=2&tid=1349076]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 232ms |
total: | 356ms |
0 / 0 |