| 
 | 
| 
 
Странное поведение 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&msg=40047070&tid=1349039]:  | 
    0ms | 
get settings:  | 
    11ms | 
get forum list:  | 
    15ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    63ms | 
get topic data:  | 
    12ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    48ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 15ms | 
| total: | 176ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...