|
Entity Framework 6 foreign key в двух таблицах
|
|||
---|---|---|---|
#18+
Всем привет, мне необходимо получить структуру из 3-х таблиц EntityMain ID-идентификатор записи -Entity2ForeignKey- ссылка на идентификатор записи в таблице Entity2, если записи нет, то NULL -Entity3ForeignKey- ссылка на идентификатор записи в таблице Entity3, если записи нет, то NULL Entity2 -ID-идентификатор записи -EntityMainForeignKey- ссылка на ID в таблице EntityMain- может быть NULL, если нет соответствующей записи Entity3 -ID-идентификатор записи -EntityMainForeignKey- ссылка на ID в таблице EntityMain- может быть NULL, если нет соответствующей записи В качестве ORM использую последний EF Core. Классы сущностей: Код: 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. 61.
Отношения EntityMain->Entity2 и EntityMain->Entity3 один к одному. Сначала всегда создается сущность Entity2 или Entity3, а потом EntityMain, то есть при создании записи EntityMain всегда для неё есть или Entity2 или Entity3. Добавление записи: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Проблема в том, что в при добавлении записи EntityMain в таблицах Entity2 и Entity3 поле EntityMainForeignKey остается NULL, в таблице EntityMain поле Entity2ForeignKey или Entity3ForeignKey проставляется. Я пробовал следующие варианты: вместо find использовать FirstOrDefault c include Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Все равно не помогает. Сразу скажу в ответ на то, что можно записи связать и по одному foreignKey и незачем их дублировать в двух таблицах. Да это так, но вышеописанная структура более оптимальна для требуемых sql-запросов-то есть можно избежать join таблиц и вместо 2-х запросить 1, так как в ней уже все данные есть. Каким образом можно заставить EF Core, чтобы ставилось сразу 2 foreignKey? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 10:34 |
|
Entity Framework 6 foreign key в двух таблицах
|
|||
---|---|---|---|
#18+
Что за хрень. Ты сделал денормализацию и теперь испытываешь ожидаемые проблемы с консистентностью. Тут очень сильно попахивает преждевременной оптимизацией. Какая именно у тебя проблема с производительностью? Почему ты решил, что JOIN настолько просадит тебе производительность, что будет оправдан весь этот геморрой? У тебя миллиард записей? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 12:48 |
|
Entity Framework 6 foreign key в двух таблицах
|
|||
---|---|---|---|
#18+
vb_sub Entity Framework 6 vb_sub использую последний EF Core. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 12:49 |
|
Entity Framework 6 foreign key в двух таблицах
|
|||
---|---|---|---|
#18+
Shocker.Pro Что за хрень. Ты сделал денормализацию и теперь испытываешь ожидаемые проблемы с консистентностью. Тут очень сильно попахивает преждевременной оптимизацией. Какая именно у тебя проблема с производительностью? Почему ты решил, что JOIN настолько просадит тебе производительность, что будет оправдан весь этот геморрой? У тебя миллиард записей? Денормализовать решил из-за того, что Entity2 и Entity3 процентов на 60 имеют общий набор данных, остальные 40-разный. Поэтому общие поля решил вывести в EntityMain, остальные раскидать по другим сущностям. Можно было бы воспользоваться другой крайностью - создать одну Entity, которые включает в себя все возможные свойства и Entity2 и Entity3. Тогда в базе данных строка данных выглядела бы более-менее, но в доменный класс Entity по моему выглядел бы плохо- пришлось бы занулять отсутствующие свойства. Мне и текущий вариант с деморализацией не очень нравится, но нормализованный не нравится еще больше. Shocker.ProТут очень сильно попахивает преждевременной оптимизацией Тяжеловато ощутить грань, где ты думаешь, что просто стараешься делать хороший дизайн, а на самом деле уже преждевременно оптимизируешь. Shocker.ProПочему ты решил, что JOIN настолько просадит тебе производительность, что будет оправдан весь этот геморрой? Без нагрузочных тестов я не могу точно сказать на каком количестве записей начнутся проблемы с производительностью, я исхожу из того, что поиск по одной таблице будет быстрее, чем поиск по той же таблице+join с другой таблицей. Плохо то, что для текущей ситуации я вижу 2 варианта- все в одной таблице и одна Entity, но тогда она будет sparse-то есть в ней будет много null column и доменная модель будет соответствующей или же как описанный мной вариант. Я к сожалению третий вариант не вижу на данный момент. Хотелось бы узнать как Вы поступаете конкретно в случае когда есть две Entity, которые преимущественно имеют общие поля? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 13:41 |
|
Entity Framework 6 foreign key в двух таблицах
|
|||
---|---|---|---|
#18+
Shocker.Pro, На данный момент Microsoft.EntityFrameworkCore 6.0.1. Какую версию посоветуете использовать EntityFrameworkCore 6.0.1 или EF6 для нового проекта? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 13:42 |
|
Entity Framework 6 foreign key в двух таблицах
|
|||
---|---|---|---|
#18+
vb_sub я исхожу из того, что поиск по одной таблице будет быстрее, чем поиск по той же таблице+join с другой таблицей. vb_sub Хотелось бы узнать как Вы поступаете конкретно в случае когда есть две Entity, которые преимущественно имеют общие поля? vb_sub На данный момент Microsoft.EntityFrameworkCore 6.0.1. Какую версию посоветуете использовать EntityFrameworkCore 6.0.1 или EF6 для нового проекта? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 14:35 |
|
Entity Framework 6 foreign key в двух таблицах
|
|||
---|---|---|---|
#18+
Shocker.Pro Обычная связь 1:1 + ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2022, 07:49 |
|
|
start [/forum/topic.php?fid=17&tid=1349013]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
389ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 234ms |
total: | 718ms |
0 / 0 |