|
Странное поведение EF
|
|||
---|---|---|---|
#18+
Вот есть такой код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
В коллекцию lstTrans пришло несколько транзакций, ранее не находившихся в базе и при этом с одинаковым TranID. В итоге, на последней строке я ловлю воттакую ошибку: System.InvalidOperationException: The instance of entity type 'Transactions' cannot be tracked because another instance with the same key value for {'TranID'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values. at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.ThrowIdentityConflict(InternalEntityEntry entry) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.Add(TKey key, InternalEntityEntry entry, Boolean updateDuplicate) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.StartTracking(InternalEntityEntry entry) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState oldState, EntityState newState, Boolean acceptChanges, Boolean modifyProperties) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.PaintAction(EntityEntryGraphNode`1 node) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraph[TState](EntityEntryGraphNode`1 node, Func`2 handleNode) at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.Add(TEntity entity) Я могу к ctx.Transactions добавить AsNoTracking - пофигу, ошибка остается. Как ее устранить? Разумеется, повлиять на содержимое lstTrans я не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2021, 09:41 |
|
Странное поведение EF
|
|||
---|---|---|---|
#18+
senglory Я могу к ctx.Transactions добавить AsNoTracking - пофигу, ошибка остается. Но это все костыли. Не должно быть разных сущностей с одинаковым ID, потому что теряется вообще всякий смысл ID ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2021, 09:54 |
|
Странное поведение EF
|
|||
---|---|---|---|
#18+
Shocker.Pro, Про "Не должно быть разных сущностей с одинаковым ID, потому что теряется вообще всякий смысл ID" - это не ко мне. Это мне такое скармливают, и я над этим не властен от слова никак. Я могу только проигнорить такое добавление или превратить его в апдейт . Так как мне находить таких дважды добавленных? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2021, 10:06 |
|
Странное поведение EF
|
|||
---|---|---|---|
#18+
А тебе нужно искать в пределах сеанса до сохранения в базу? Или каждый раз и в базе тоже? И что с параллельностью, то есть может кто-то параллельно добавлять записи в другом контексте? Сейчас ты ищешь только в базе, но не в трекере. Можно отдельно поискать в трекере. Но если точка добавления только одна, я бы просто сделал HashSet с добавлеными ID-шниками и проверял по нему, а очищать его в момент сохранения контекста в базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2021, 10:43 |
|
Странное поведение EF
|
|||
---|---|---|---|
#18+
senglory В коллекцию lstTrans пришло несколько транзакций, ранее не находившихся в базе и при этом с одинаковым TranID. senglory Разумеется, повлиять на содержимое lstTrans я не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2021, 12:19 |
|
Странное поведение EF
|
|||
---|---|---|---|
#18+
senglory Я могу к ctx.Transactions добавить AsNoTracking - пофигу, ошибка остается. Как ее устранить? Разумеется, повлиять на содержимое lstTrans я не могу. Не добавлять в контекст сущности с одинаковыми ID. Что ж тут сложного? Это как квадратное в круглое засовывать удивляться -- о чо ж оно не лезет-то? А что делать? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2021, 20:54 |
|
|
start [/forum/topic.php?fid=17&tid=1349039]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 232ms |
total: | 359ms |
0 / 0 |