|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Всем привет! Прошу прощения за возможный нубский вопрос. APS.Core, Linq и всё последующее только изучаю. задача такая: нужно по id вывести результаты из разных таблиц в БД есть таблицы CLIENTS и ACCOUNTS, и куча других связанных с этими таблица CLIENTS поле тип переменной ключCLIENTID int Primary key CLIENTCODE nvarchar CATEGORYID int Foreign key FIRSTNAME nvarchar LASTNAME nvarchar... таблица ACCOUNTS поле тип переменной ключACCOUNTID int Primary key CLIENTID int Foreign key ACCOUNTCODE stringCATEGORIES int Foreign key BALANCE decimal... Таблица ACCOUNTS ссылается на таблицу CLIENTS через ключ CLIENTID. Сама таблица CLIENTS имеет ещё кучу разных включений, например CATEGORYID берёт данные из CLIENTCATEGORIES. Я реализовал вывод таблицы CLIENTS (автосоздание контроллера MVC с редактированием, удалением и выводом..сущностей) Теперь я хочу чтобы при нажатии кнопки Details выводились данные по клиенту (которые находятся в модели клиенты) и данные из таблицы ACCOUNTS с условием, где CLIETNID = выбранному id сделать это в sql просто, где N - нужный ID Код: sql 1. 2. 3.
Помогите реализовать это в C# ASP.Core? Вот так выглядит первоначальный код Details сгенерированный контроллером. Код выводит данные по клиенту и подставляет в поле CATEGORYID вместо значения int расшифровку поля из таблицы CLIENTCATEGORIES по ключу CATEGORYID Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Резюме. Нужно к выводу детальной информации по клиенту добавить информацию из таблицы ACCOUNTS связанных по полю CLIENTID. При этом к 1 клиенту может быть привязано несколько ACCOUNTS. Надеюсь вопрос мой понятен =) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:15 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Не надо приводить таблицы, приведи лучше код сущностей. А в целом - просто добавляй еще Include и ThenInclude в нужных местах ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:59 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Надеюсь правильно понимаю понятие сущности Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 14:24 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
EltsVV Надеюсь правильно понимаю понятие сущности Сущность - CLIENTS, ACCOUNTS и т.п. Кстати, принятно называть классы сущностей в единственном числе; имена классов в принципе - строчными буквами, начиная с заглавной, а такое "var cLIENTS" даже в страшном сне не могло присниться. Учитесь сразу писать код так, чтобы его легко читали другие люди. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 14:32 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Я приношу свои извинения за некрасоту написания, название классов и переменных взято из готовой БД привить которую я не могу. Книжку читаю, но большой объём не сразу откладывается в голове. А сроки поставленные руководством уменьшаются быстрее скорости моего чтения ;) Пока есть общее понимание. Предыдущий опыт работы с БД был совершенно иным и на технологиях WinForms. Поэтому извините за нубство... Модель CLIENTS Код: 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. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125.
Модель ACCOUNTS Код: 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. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 14:40 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Тебе в сущность клиента нужно добавить поле Код: c# 1.
после чего можешь инклюдить Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 15:03 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Благодарю за помощь! Дальше постараюсь разобраться. Либо буду писать сюда, чтобы не разводить разных тем. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 08:51 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Прописал новые модели ACTIVESERVICESFORACCOUNTS и SERVICES В контроллере сначала добавил .ThenInclude(c => c.ActivServiceList) всё работает, вывод из таблицы Active есть. Пытаюсь шагнуть на уровень глубже ( .ThenInclude(d => d.ServiceList) ) вылетает ошибка Код: sql 1. 2.
Получается из сущности Services мне нужно получить Name для выбранного Клиента из сущности Clients. Чтобы дойти до поля Services.Name нужно пройти по цепочке Код: sql 1. 2. 3.
Такое ощущение, что второй ThenInclude цепляется к AccountList вместо ActivServiceList Контроллер Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Сущность ACTIVESERVICESFORACCOUNTS Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Сущность SERVICES Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
View Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Заранее благодарю. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 13:03 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
EltsVV Такое ощущение, что второй ThenInclude цепляется к AccountList вместо ActivServiceList Но где объявлен ActivServiceList я не вижу ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 13:17 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro EltsVV Такое ощущение, что второй ThenInclude цепляется к AccountList вместо ActivServiceList Но где объявлен ActivServiceList я не вижу Прошу прощения! ActivServiceList я по аналогии с Вашей предыдущей подсказкой объявил в ACCOUNTS Код: 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.
Также внёс данные по новым таблицам в DbContext Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 14:37 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Судя по ошибке, он пытается найти поле "ACTIVESERVICESFORACCOUNTSACTIVESERVICESFORACCOUNTID" Только не понимаю почему он генерирует это имя. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 14:40 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
EltsVV Судя по ошибке, он пытается найти поле "ACTIVESERVICESFORACCOUNTSACTIVESERVICESFORACCOUNTID" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 14:43 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro, В том то и дело что эту порнографию он читает. Данные из ACTIVESERVICESFORACCOUNTS выводятся но в самой таблице хранятся коды, а расшифровка кодов лежит в SERVICES и когда я добавляю последний иннер джоин он крашется.... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 15:47 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Так SERVICES же не ссылается на ACTIVESERVICESFORACCOUNTS зачем ты в ACTIVESERVICESFORACCOUNTS добавил List<SERVICES>, если там ссылка просто на один SERVICES ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 16:50 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Благодарю за помощь. Получилось так, чтобы получить доступ к Код: sql 1. 2. 3.
по сущностям прописал таким образом: Клиенты, добавляем АккаунтЛист, так как у 1 клиента моет быть несколько аккаунтов Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
В Аккаунты добавлем АктивЛист, так как у 1 аккаунта может быть несколько автивных услуг Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В АктивныеАккаунты добавляем модель Service, которая ссылается на конкретную расшифровку Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Сущность SERVICES оставляем как она есть Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
И далее во вью запускаем 2 цикла foreach для перебора. Сначала по Аккаунтам, затем по АктивнымАккунтам Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Тут за конструкцию If прошу сильно не ругать, пока не искал способоа вывести Acc.CONTRACT если ActivServiceList пуст В контроллере прописал последовательность join'ов Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
В целом правильно понял логику взаимодействия? P.S. И ещё раз спасибо за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 09:49 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
EltsVV В целом правильно понял логику взаимодействия? Что касается правильности понимания - нужно просто прочитать учебник по EF, сделать пару тестовых примеров на Code First. Тогда и подобных вопросов не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 10:36 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro Что касается правильности понимания - нужно просто прочитать учебник по EF, сделать пару тестовых примеров на Code First. Тогда и подобных вопросов не будет. Понял, пока читаю ASP.NET Core MVC 2 (А. Фримен). Хотя с новой ошибкой надо искать книги EF... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 14:55 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Проблема простая.. у меня SQL 2003. Сгенерировал автоконтроллер по сущности: mClaim Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
При попытке сохранить данные в БД в таблицу Claims (как с пустыми полями дататайм, так и заполненными) вылетает ошибка. Код: sql 1.
Суть ошибке понятна. Старая версия БД не держит новый тип датытайма. В сети нашёл такое комментарий на ошибку: Эта ошибка обычно происходит, как только вы добавляете обязательный (не нулевой) DATETIME столбец в существующую таблицу, и вы не устанавливаете значение до сохранения сущность для базы данных. В этом случае .NET будет отправлять значение по умолчанию который равен 1.1.0001, и это значение не вписывается в диапазон DATETIME. Этот (или что-то подобное) будет источником вашей проблемы. Перепроверил БД. В таблице Claims все датытаймы позволяют Null. Из всех полей только ID Не Null. Ещё находил, что в неком файле EDMX нужно прописать ProviderManifestToken=” 2005", но не могу понять, где искать этот файл и параметры. Можете подсказать, как заставить EF сохранять данные в datetime вместо datetime2. В общем пока читаю. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 15:13 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
EltsVV Перепроверил БД. В таблице Claims все датытаймы позволяют Null. EltsVV Можете подсказать, как заставить EF сохранять данные в datetime вместо datetime2. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 15:21 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
выбирай modelBuilder.Entity<PageContent>() .Property(f => f.DateModified) .HasColumnType("datetime2"); глобально modelBuilder.Properties<DateTime>() .Configure(c => c.HasColumnType("datetime2")); атрибутом [Column(TypeName="datetime2")] public DateTime DateModified{ get; set; } указать точность modelBuilder.Entity<PageContent>() .Property(f => f.DateModified) .HasColumnType("datetime2") .HasPrecision(0); ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 15:26 |
|
|
start [/forum/topic.php?fid=18&msg=39898146&tid=1354849]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 265ms |
total: | 403ms |
0 / 0 |