|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
Как организовывать логгирование вставленных записей, в условиях когда записи вставляются в рамках большой транзакции, и рано ее комитить ? Если создается юзер, и нужно бы в логер отправить информацию с новым ID. А после создания юзера будем еще что-то создавать - роли ему или еще что-то, уже в следующих методах. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:31 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
Предположим в чистом Ado.Net код будет таким: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Да нужно минимизировать длительность транзакции и т.д. Но в итоге залогируем все, что нам нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:40 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
Fungus, Вы ещё отправку уведомления по почте внутрь транзакции добавьте :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:43 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
skyANA, Логгирование не нужно ? Или в триггеры пихать, размазывая логику. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:46 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
Fungus, нужно, но зачем его внутрь транзакции засовывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:55 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
skyANA, а, вы про то, что логгирование происходит в этой же транзакции ? В принципе да, это можно вынести в отдельную автономную транзакцию, и комитить ее отдельно. Если рабочая транзакция отвалится по ошибке, то транзакция логирования должна будет закомитится более менее гарантировано. Но это все детали. Основной вопрос, как делать логгирование в EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:00 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
FungusКак получить ID вставленной записи (для лога) если транзакцию рано завершать Добавить колонку CorrelationId (GUID) и прозрачно с ней работать в логике. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:01 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
Смузи, Можно подробней пожалуйста ? не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:04 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
FungusskyANA, а, вы про то, что логгирование происходит в этой же транзакции ? В принципе да, это можно вынести в отдельную автономную транзакцию, и комитить ее отдельно. Если рабочая транзакция отвалится по ошибке, то транзакция логирования должна будет закомитится более менее гарантировано. Но это все детали. Основной вопрос, как делать логгирование в EF. А зачем делать логгирование в EF? Берёте log4net, NLog, или Serilog, или EnterpriseLibrary.Logging и используете. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:04 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:06 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:10 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
skyANA, Суть вопроса в том, что получить Id вставленной записи мы можем непосредственно вставив сущность в БД, и считав ее через SCOPE_IDENTITY(). Но EF же не вставит пока не вызовем SaveChanges, который произойдет гораздо позже. И как получить ID вставленной записи в том месте, где код создает ее (чтобы тут же вставить в лог) ? Или как вообще реализовать логгирование всех создаваемых сущностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:11 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
Fungus, а в чём проблема вызвать SaveChanges? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:14 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
Смузи, Что вообще за ID корелляции, и как он относится к логгированию в программе ? Правильно ли я понимаю, что вы предлагаете создавать псевдо ключ в виде GUID. А потом, после SaveChanges, собирать по базе все вставленные сущности имея на руках эти псевдо ключи и вычисляя реальный id ? И это все вместо этих строчек кода: Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:15 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
Что за логгер? К примеру в энлоге: http://nlog-project.org/2015/08/31/nlog-4-1-0-is-now-available.html Trace Activity Id Layout Renderer: ${activityid} write the System.Diagnostics his trace correlation id. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:17 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
skyANAFungus, а в чём проблема вызвать SaveChanges? SaveChanges это же комит транзакции. Если мы вставим Юзера, сделаем SaveChanges, а при вставке ролей упадем по ошибке, то как откатывать вставленного юзера ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:19 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
FungusПравильно ли я понимаю, что вы предлагаете создавать псевдо ключ в виде GUID. А потом, после SaveChanges, собирать по базе все вставленные сущности имея на руках эти псевдо ключи и вычисляя реальный id ? Да, это ключ логгера. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:19 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:20 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
FungusskyANAFungus, а в чём проблема вызвать SaveChanges? SaveChanges это же комит транзакции. Если мы вставим Юзера, сделаем SaveChanges, а при вставке ролей упадем по ошибке, то как откатывать вставленного юзера ? Еще раз, какая задача решается, транзакции или логирование? Это две перпендикулярные плоскости. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:20 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
FungusЕсли мы вставим Юзера, сделаем SaveChanges, а при вставке ролей упадем по ошибке, то как откатывать вставленного юзера ? Так это нужно делать одним SaveChanges. Транзакция у EF будет, но она будет неявная. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:23 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
СмузиFungusПравильно ли я понимаю, что вы предлагаете создавать псевдо ключ в виде GUID. А потом, после SaveChanges, собирать по базе все вставленные сущности имея на руках эти псевдо ключи и вычисляя реальный id ? Да, это ключ логгера. вы серьезно ? Предлагаете реализовать такой велосипед: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
По моему это какая то глупость. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:25 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
FungusПо моему это какая то глупость. Correlation - это атрибут логгера, а не User. Я же написал выше. Во-вторых, зачем тут TransactionScope? Еще раз, в контекст добавляй юзера, прикручивай к нему роли и сохраняйся. Пора бы уже выучить EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:28 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
СмузиЕще раз, какая задача решается, транзакции или логирование? Задача, реализовать на EF такой код Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
так, чтобы в итоге в логе оказались ID юзера и назначенных ему записей в таблице UserRoles. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:28 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
Я выше написал что делать. Учить EF и выбрать готовый логгер, как советовал skyANA. Больше нечего добавить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:32 |
|
EF. Как получить ID вставленной записи (для лога) если транзакцию рано завершать ?
|
|||
---|---|---|---|
#18+
FungusskyANAFungus, а в чём проблема вызвать SaveChanges? SaveChanges это же комит транзакции. Если мы вставим Юзера, сделаем SaveChanges, а при вставке ролей упадем по ошибке, то как откатывать вставленного юзера ? Нормально откатится. http://stackoverflow.com/questions/17523568/entity-framework-retrieve-id-before-savechanges-inside-a-transaction ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:44 |
|
|
start [/forum/topic.php?fid=20&msg=39353729&tid=1400196]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 418ms |
0 / 0 |