|
Странности с EF Core #2
|
|||
---|---|---|---|
#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. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
И прямо на AddRange ловлю: авторSystem.InvalidOperationException : The instance of entity type 'PromTerm' cannot be tracked because another instance with the same key value for {'PromotionId', 'POSTerminalId'} 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. Stack Trace: IdentityMap`1.ThrowIdentityConflict(InternalEntityEntry entry) IdentityMap`1.Add(TKey key, InternalEntityEntry entry, Boolean updateDuplicate) IdentityMap`1.Add(TKey key, InternalEntityEntry entry) NullableKeyIdentityMap`1.Add(InternalEntityEntry entry) StateManager.StartTracking(InternalEntityEntry entry) InternalEntityEntry.SetEntityState(EntityState oldState, EntityState newState, Boolean acceptChanges, Boolean modifyProperties) InternalEntityEntry.SetEntityState(EntityState entityState, Boolean acceptChanges, Boolean modifyProperties, Nullable`1 forceStateWhenUnknownKey) EntityGraphAttacher.PaintAction(EntityEntryGraphNode`1 node) EntityEntryGraphIterator.TraverseGraph[TState](EntityEntryGraphNode`1 node, Func`2 handleNode) EntityGraphAttacher.AttachGraph(InternalEntityEntry rootEntry, EntityState targetState, EntityState storeGeneratedWithKeySetTargetState, Boolean forceStateWhenUnknownKey) InternalDbSet`1.SetEntityState(InternalEntityEntry entry, EntityState entityState) InternalDbSet`1.SetEntityStates(IEnumerable`1 entities, EntityState entityState) InternalDbSet`1.AddRange(IEnumerable`1 entities) В честь чего оно решило что 'PromotionId' +'POSTerminalId' — это ключ? У меня в схеме об этом ни слова. Но на этом приколы не заканчиваются — если раскомментить Append() и закомментить AddRange(), то добавление проходит на ура, и на "ключ" оно не жалуется. ЧЯДНТ? И как писать такое правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 23:55 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
У тебя в OnModelCreating ничего дополнительно не конфигурируется? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 00:17 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
fkthat, Fixed. Проблема была в OnModelCreating, где, как оказалось, был код, который определял ключ сущности по-своему, а не по-атрибутному. Но возникает вопрос — а кк сделать так, чтобы композитные ключи в EF Core (именно в Core) работали через декораторы атрибутами, а не через FluentApi ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 01:30 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
senglory Fixed. Проблема была в OnModelCreating, где, как оказалось, был код, который определял ключ сущности по-своему, а не по-атрибутному. Но возникает вопрос — а кк сделать так, чтобы композитные ключи в EF Core (именно в Core) работали через декораторы атрибутами, а не через FluentApi ? По-моему никак. Но я, если честно, всегда против того, чтобы конфигурить EF аттрибутами. Из соображений "чистоты" модели. Т.е. чтобы модель POCO была отдельно, а меппинг (контекст) отдельно. Если в модели атрибут [Required] или [MaxLength], то это нормально, т.к. это аттрибуты самого домена, но всякие [Table], [Key], [Column], [ForeignKey] и прочее должно конфигурится флуентом. Дело вкуса, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 01:47 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
senglory работали через декораторы атрибутами, а не через FluentApi ? В смысле? Вы хотите, чтобы код, который написан через fleunt не работал? Понимаете, что это несколько странно до уровня крайней упоротости? Уберите код, который вам мешает. А то это выглядит, что у вас в каком-то месте написано сложение чисел, это вам вдруг стало мешать, и вы спрашиваете, а как бы сделать так, чтобы сложение чисел не работало во всей программе? -- Зовите санитаров! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 22:54 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
hVostt В смысле? Вы хотите, чтобы код, который написан через fleunt не работал? Не, он имел в виду - как сконфигурировать составной ключ сущности с помощью аттрибутов. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 23:18 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
fkthat hVostt В смысле? Вы хотите, чтобы код, который написан через fleunt не работал? Не, он имел в виду - как сконфигурировать составной ключ сущности с помощью аттрибутов. Аа... пффф.. Ну, в EF6 это было можно. В EF Core даже если нельзя, можно создать свои соглашения и атрибуты и добиться желаемого. В целом согласен с тобой, что в атрибуты нельзя тащить параметры маппинга в БД. Самый верняк, это писать реализации интерфейса IEntityTypeConfiguration<TEntity> и регистрировать их в DbContext-е. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 23:52 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
hVostt В EF Core даже если нельзя Нельзя :) Без "даже" и "если" :)) PM> Add-Migration FooThe entity type 'Foo' has multiple properties with the [Key] attribute. Composite primary keys can only be set using 'HasKey' in 'OnModelCreating'. hVostt можно создать свои соглашения и атрибуты и добиться желаемого. Ну это какой-то совсем оверинженеринг. Врят ли у человека хотя бы несколько таких сущностей (с композитным клучом), чтобы так морочиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2021, 01:51 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
hVostt, В чем прелесть атрибутов - пишется все коротко, ощутимо короче, чем в FluentApi. Поэтому мне и непонятно, в честь чего для EF Core атрибуты оставили в таком недобитом состоянии - вроде и есть, а вроде и выкинуть их хотят. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2021, 12:55 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
senglory hVostt, В чем прелесть атрибутов - пишется все коротко, ощутимо короче, чем в FluentApi. Поэтому мне и непонятно, в честь чего для EF Core атрибуты оставили в таком недобитом состоянии - вроде и есть, а вроде и выкинуть их хотят. там еще много чего не доделано. в целом, атрибуты норм. но, как писал fkthat, лучше их по минимуму. чтобы не привязываться к конкретной СУБД ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2021, 17:40 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
fkthat Ну это какой-то совсем оверинженеринг. Врят ли у человека хотя бы несколько таких сущностей (с композитным клучом), чтобы так морочиться. Это не оверинжениринг, это из всех самый лучший способ определения маппинга: создавать классы IEntityTypeConfiguration<TEntity> на каждую сущность. Прописывать маппинг сущностей в OnModelCreating это колхоз. Выносить маппинг в какие-то левые кастомные классы это колхоз. Использовать атрибуты тоже колхоз ещё тот. Колхоз хорош на небольших проектах, где лень заморачиваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2021, 23:39 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
senglory hVostt, В чем прелесть атрибутов - пишется все коротко, ощутимо короче, чем в FluentApi. Поэтому мне и непонятно, в честь чего для EF Core атрибуты оставили в таком недобитом состоянии - вроде и есть, а вроде и выкинуть их хотят. Тем, что абстракция сущности прибивается гвоздями к деталям хранения. Более того, сложный маппинг не вывозится атрибутами. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2021, 23:40 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
hVostt Это не оверинжениринг, это из всех самый лучший способ определения маппинга: создавать классы IEntityTypeConfiguration<TEntity> на каждую сущность. Я имел в виду кастомные конвенции :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 02:02 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
fkthat hVostt Это не оверинжениринг, это из всех самый лучший способ определения маппинга: создавать классы IEntityTypeConfiguration<TEntity> на каждую сущность. Я имел в виду кастомные конвенции :)) Конвекции хорошо подходят на штампованных проектах. Когда у тебя их много не очень больших и хочется просто сэкономить время на тираже. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 11:00 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
hVostt Конвекции хорошо подходят на штампованных проектах. Когда у тебя их много не очень больших и хочется просто сэкономить время на тираже. Я только один раз в жизни писал эти кастомные конвенции. У DBA там были свои правила именования для БД, а, понятно, все эти переименования .NET <-> БД мепить руками совсем не хотелось. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 11:25 |
|
Странности с EF Core #2
|
|||
---|---|---|---|
#18+
fkthat, А я на штамповке :) Мы типа бойлерплейт сделали с кучей конвекций, при чём почти даже без атрибутов, чисто на соглашениях. Потом отдали шараге, которая пилила кучу микроприложений, иногда поддерживая этот плейт. Как оказалось, это примерно на порядки быстрее, чем делать какой-то супер-фреймворк-платформа аля убийца 1С или веб-дельфи. Просто быстрее и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 14:05 |
|
|
start [/forum/topic.php?fid=17&tid=1349037]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 177ms |
0 / 0 |