Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
Моделируем сущности на основе БД: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Была идея так же создать третий класс к которому ведут эти таблицы, который выглядит следующим образом, но предподаватель сказал, что в нём нет необходимости. Код: c# 1. 2. 3. 4. 5. 6. Задача. Вернуть список компаний с ихними клиентами, но если один человек евляеться клиентом двух компаний, то он должен быть представителем одного и того же объекта. Начала с подобного: Код: 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. LINQ пользоваться запретили, и заявка к БД должна быть только одна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2016, 10:09 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
Извините, по ошибке создал тему в этой ветки, а не в соседней, если можно перенесите. И пожалуйста исправьте евляеться, на является, а то я не вижу возможности редактировать сообщение, не доспал глупые ошибки, простите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2016, 10:13 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
unsafe, Ну так у тебя ж каждый клиент имеет свой уникальный ID. Просто перед вставкой в общий список клиентов проверяй наличие єлемента с такам же ID, и не вставляй его. Ну а для компаний сохрани связку ID компании <-> ID клиента (можно в классе Company сделать отдельный список клиентов только этой компании). Тогда по ID клиента можно брать элемент из общего списка клиентов (одна и та же сущность). P.S. Лучше сделать ORDER BY по id компании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2016, 01:47 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
Оставлю здесь, как я решил данную проблему. Только модераторы перенесите пожалуйста тему. Это всё таки ADO.net Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2016, 20:19 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
unsafeLINQ пользоваться запретили, и заявка к БД должна быть только одна. LINQ запретили, запрос - это "заявка", это что за колхоз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2016, 21:56 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
unsafe, вместо TryGetValue используйте метод ContainsKey для проверки существования элемента в словаре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2016, 07:53 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
MonochromatiqueunsafeLINQ пользоваться запретили, и заявка к БД должна быть только одна. LINQ запретили, запрос - это "заявка", это что за колхоз? Я думаю программист должен знать как выполнить эту задачу без использования LINQ. LINQ сильно упрощает жизнь. К тому же, с точки зрения оптимизации лучше обычный SQL запрос. skyANA, С TryGetValue мы так же присваиваем значение, которое будет в последствие использоваться. Если клиент/компания существует, то переменной existingClient/existingCompany будет присвоено существующее значение из словаря. А ContainsKey вернёт лишь булевое значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2016, 10:37 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
unsafeskyANA, С TryGetValue мы так же присваиваем значение, которое будет в последствие использоваться. Если клиент/компания существует, то переменной existingClient/existingCompany будет присвоено существующее значение из словаря. А ContainsKey вернёт лишь булевое значение. Тогда объясните зачем выделенный ниже фрагмент кода: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И кстати Вы дублируете company.Clients.Add в ветках if-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2016, 11:06 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2016, 11:22 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
unsafeЯ думаю программист должен знать как выполнить эту задачу без использования LINQ. Особенно - используя "в заявке" таблицу, которую сгенерил EF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2016, 22:47 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
skyANAunsafeskyANA, С TryGetValue мы так же присваиваем значение, которое будет в последствие использоваться. Если клиент/компания существует, то переменной existingClient/existingCompany будет присвоено существующее значение из словаря. А ContainsKey вернёт лишь булевое значение. Тогда объясните зачем выделенный ниже фрагмент кода: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Добавление компании к уже существующему клиенту skyANAИ кстати Вы дублируете company.Clients.Add в ветках if-а. Да, но в случае когда клиента не существует добавляется клиент который был считан из БД, когда же клиент существует, он добавляется в словарь к уже существующей компании. skyANAИ ещё у Вас сплошные баги. Вы сначала найдите и клиента и компанию, или создайте новые, если их нет в словарях, а потом уже связывайте друг с другом. В чём именно заключаются баги? Разница лишь в том что в моей реализации сначала считываются все данные, а потом уже проверяется существует ли такой клиент/компания. Скорее это не баг, а не рациональное использовании ресурсов. Ваша реализация гораздо боле практичная. Спасибо. MonochromatiqueОсобенно - используя "в заявке" таблицу, которую сгенерил EF. Нет. Написал сам вручную. Если сгенерил EF где же тогда модификатор virtual перед коллекцией? Сейчас додумываю, что надо было мне ещё знак вопроса ставить после типов которые принимают null в БД. Ну и соответственно проверка на DBNull при извлечении данных из БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2016, 01:31 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
unsafeskyANAпропущено... Тогда объясните зачем выделенный ниже фрагмент кода: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Добавление компании к уже существующему клиентуЯ же Вам чётко выделил фрагмент: clients[client.ID] , - этот код ничего никуда не добавляет, он достаёт из словаря значение по ключу. Зачем, если Вы уже достали его методом TryGetValue ? unsafeskyANAИ кстати Вы дублируете company.Clients.Add в ветках if-а. Да, но в случае когда клиента не существует добавляется клиент который был считан из БД, когда же клиент существует, он добавляется в словарь к уже существующей компании.Я прекрасно понял, что должен делать Ваш код, намекаю на то, что его можно упростить :) unsafeskyANAИ ещё у Вас сплошные баги. Вы сначала найдите и клиента и компанию, или создайте новые, если их нет в словарях, а потом уже связывайте друг с другом. В чём именно заключаются баги? Разница лишь в том что в моей реализации сначала считываются все данные, а потом уже проверяется существует ли такой клиент/компания. Скорее это не баг, а не рациональное использовании ресурсов. Ваша реализация гораздо боле практичная. Спасибо.Вы бы для начала внимательно посмотрели на свой код, а потом уже утверждали, что "Разница лишь в том.." :) Рассмотрим случай, когда и клиент и компания уже существуют в словарях. НЕ существующими я буду называть объекты, что созданы через new, а не найдены в словаре. Что делает Ваш код? 1. Код: c# 1. 2. Существующему клиенту, добавляет ссылку на НЕ существующую компанию, а ей зачем-то добавляет ссылку на существующего клиента. 2. Код: c# 1. 2. НЕ существующему клиенту добавляется ссылка на существующую компанию, а потом ей же добавляется ссылка на НЕ существующего клиента. В результате задание не выполнено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2016, 08:19 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
skyANA, После вашей реализации пытаюсь заново взглянуть на свой криворукий код. Можете глянуть, пожалуйста Сущность: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Функция: Код: 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. Где соотношение продуктов с категориями это 1-к-1, соотношение категорий с заказами это 1-ко-многим. Что то со списком заказов мне как то не очнеь нравиться, но при этом заказ будет каждую итерацию, то есть добавлять мы его к списку продуктов должны каждый раз. Правильно ли я это реализовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 10:16 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
unsafe, подробно сформулируйте поставленную задачу. А то у меня большой вопрос о том, зачем в продукте держать список заказов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 10:22 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
В реальной жизни как правило в заказ можно добавить несколько продуктов, а не только один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 10:24 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
skyANA, В данном случае, мы держим в продукте список всех заказов, а потом суммируем их кол-во и берём цену продукта, и получаем общую сумму заказов по конкретному продукту. У нас экспериментальная база, полигон. Дают задание надо выполнить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 11:46 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
unsafeskyANA, В данном случае, мы держим в продукте список всех заказов, а потом суммируем их кол-во и берём цену продукта, и получаем общую сумму заказов по конкретному продукту. Держать в продукте список заказов только для того, чтобы их проссумировать - интересный эксперимент :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 19:19 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
skyANA, =) Ну хоть правильно реализовал? Я имею ввиду код функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 21:01 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
unsafeskyANA, =) Ну хоть правильно реализовал? Я имею ввиду код функции Нет, с ошибкой. Плохо тестируете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 08:04 |
|
||
|
Реализация отношения много-ко-многим.
|
|||
|---|---|---|---|
|
#18+
skyANA, Ужас, Вы меня один раз исправили, а я наступаю на те же грабли. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:44 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=39226558&tid=1355909]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 402ms |

| 0 / 0 |
