| 
 | 
| 
 
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&gotonew=1&tid=1349013]:  | 
    0ms | 
get settings:  | 
    11ms | 
get forum list:  | 
    14ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    69ms | 
get topic data:  | 
    10ms | 
get first new msg:  | 
    7ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    44ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 241ms | 
| total: | 408ms | 

| 0 / 0 | 

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