|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
||||||||||||||||
Связанные данные в трехуровневой архитектуре22.09.2019, 23:23. Показов 8722. Ответов 150
Метки нет (Все метки)
Как подтягивать связанные данные в трехуровневой архитектуре?
У меня есть три уровня данных. На уровне DAL там понятно как обращаться к связанные данным, там есть связи. Вот на пример в DAL заказ у меня выглядит так
Как вариант переносить связи на каждый уровень. Какие еще варианты?
0
|
||||||||||||||||
| 22.09.2019, 23:23 | |
|
Ответы с готовыми решениями:
150
Удалить связанные данные Как создать приложение с трехуровневой архитектурой? Поделитесь информацией о приложениях с трёхуровневой архитектурой |
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|
| 24.09.2019, 20:24 [ТС] | |
|
sau, в данном случае нет разницы, пока нет, но так я смогу спокойно обогатить DTO если захочу.
Как в итого мне быть с данной ситуации, как удалять по id? Добавлено через 6 минут Вернее я ошибся, не по id, а по коду. И не удалять, а изменять
0
|
|
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|
| 24.09.2019, 21:34 [ТС] | |
|
sau, В общем вот что происходит.
На View модели ID все, теряется, а чтобы EF обновил, нужен ID
0
|
|
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|
| 24.09.2019, 21:37 [ТС] | |
|
И вот сама ошибка
0
|
|
|
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
|
||||||
| 24.09.2019, 21:53 | ||||||
|
Cherry_Pie,
0
|
||||||
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|
| 24.09.2019, 22:00 [ТС] | |
|
0
|
|
|
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
|
||
| 24.09.2019, 22:06 | ||
вида Expression<Func<T, bool>> , которое может перевариваться тем или иным образом в зависимости от типа репозитория , например dbcontext-ом в SQL выражение. в общем , если попроще описать это , то такое: dbContext.Items.Find(item=>item.Code==bl lItem.Code)
0
|
||
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|||||||
| 24.09.2019, 23:13 [ТС] | |||||||
|
Я так понял, что я просто должен в сервисе найти item по коду в репозитории и просто приравнять ему поля пришедшие с View? Правильно? Вот что я придумал(
Добавлено через 8 минут И еще вопрос, при добавлении записей в таблице Code должен генерироваться, а не что бы пользователь вводил вручную. Для этого нужно в BL в DTO добавить метод для генерации этого кода?
0
|
|||||||
|
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
|
|||||||
| 24.09.2019, 23:56 | |||||||
|
где query мы можем строить каким угодно образом , хоть по коду , хоть по ID. мы можем запросить так _unitOfWork.ItemRepository.Find(item=>it em.Code==itemDTO.Code); или так _unitOfWork.ItemRepository.Find(item=>it em.ID==123); , интерфейс репозитория при этом никак не затрагивается . меняются лишь выражения запросов. Спецификации нужны тогда , когда у Вас получается множество одинаковых сложных запросов - например Вы ищите обьект по нескольким свойствам и делаете это в нескольких методах - на удалении , на обновлении , уже как минимум в двух местах будет один и тот же запрос на поиск обьекта. , в случае если структуру запроса нужно будет изменить - ее придется менять как минимум в двух и более местах - во избежании чего мы изолируем логику построения expresion выражений в одном месте = спецификация. Понятно , что реализации спецификаций могут быть самые разные , но в NET , применительно к репозиториям , реализация через expression минималистична и достаточна.
0
|
|||||||
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|
| 25.09.2019, 00:08 [ТС] | |
|
sau, Так, получается во всех репозиториях я должен прописать метод find?а в нем что? Писать Linq запрос .where item.code=чему?
Добавлено через 5 минут Вот если я захочу сделать поиск по категориям, по textbox, сортировку по цене, то я могу не писать новый метод в репозиториях, а просто добавить в спецификацию новые методы и будет что вроде: itemqueeyspecification. SortByPrice?
0
|
|
|
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
|
||
| 25.09.2019, 00:17 | ||
|
Cherry_Pie, если у Вас там dataContext , то DbSet уже принимает на входе Expression выражение ,
T Find(Expression<Func<T, bool>> query) { return dataContext.Set<T>().Find(query); } ну и да , тут речь идет о джинерик репозитории Repository<T>, более универсальная реализация. в общем , я сейчас совсем запутаю ). Добавлено через 1 минуту притом SortByPrice ничего не сортирует , оно лишь строит выражение сортировки , которое потом в репозитории обрабатывается.
0
|
||
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
||||||
| 25.09.2019, 00:22 [ТС] | ||||||
|
sau, О Господи, я не думал что такое задание выматает мне все нервы.
В общем в моем случае нужно просто сделать данный код и все?
0
|
||||||
|
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
|
||
| 25.09.2019, 00:40 | ||
|
нужно учебник читать и не один. Я , кстати кидал пример на CMS магазина , там может и не шибко замороченная архитектура , но вполне себе юзабельная для целей магазина , как раз ваш случай.- и есть трехлаер. , есть репозитории , сервисы , модели.
0
|
||
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|
| 25.09.2019, 00:42 [ТС] | |
|
sau, Да, я посмотрел, ничерта не понял)) не слишком замороченная архитектура? Для меня это был страшный сон
0
|
|
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|||||||||||||
| 25.09.2019, 19:04 [ТС] | |||||||||||||
|
Как мне в репозитории метод Find реализовать? у меня имеется GetByCode
У меня он длинный почему-то
0
|
|||||||||||||
|
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
|
|||||||
| 25.09.2019, 20:12 | |||||||
Сообщение было отмечено Cherry_Pie как решение
Решение
1
|
|||||||
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
||||||||||||||||||||||
| 25.09.2019, 23:13 [ТС] | ||||||||||||||||||||||
|
Добавлено через 51 минуту sau, А как можно создавать уникальный Code? генерировать его и потом проверять есть ли элемент с таким Code? И где генерировать? В сервисе? Добавлено через 1 час 57 минут sau, Является ли правильной моя генерация кода? Код должен выглядеть "ЧЧ-ЧЧЧЧ-ББ-ЧЧ" (ч-число, б- буква) В сервисе
0
|
||||||||||||||||||||||
|
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
|
|
| 25.09.2019, 23:33 | |
|
Cherry_Pie, смотря что за код , если код продукта то продукт маркируется по правилам производителя , у них своя БД и свой учет номеров. , по этому он поступает из внешней системы и в вашей БД хранится в оригинальном виде.
Если это код заказа в вашей системе , то сами придумываете ему алгоритм гарантирующий уникальность , можно сделать на основе автоинкремента записи в БД. while (!check) - слишком длительная схема , код может почти никогда не сгенерироваться уникальным.
0
|
|
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|
| 25.09.2019, 23:36 [ТС] | |
|
sau, да, про код производителя я знаю, по заданию сделать код товаров, заказчиков быть именно в «выдуманны форматах».
А вот код видимо нужно в автоинкрементируемых. А как в code first не у ключа сделать автоинкрементных?
0
|
|
|
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
|
||
| 25.09.2019, 23:56 | ||
|
но вообще , опора на автоинкримент не всегда хороший вариант , если Вы например решите перенести часть товаров в другую БД - в целях оптимизации , снижения нагрузки на сервер и т.п. , то там счетчики записей будут уже свои и не дадут гарантию уникальности кода по нескольким БД , так что в идеале нужен свой счетчик. И кстати , если код товара уникален по самим характеристикам товара , тогда ни счетчики , ни какие либо прочие зависимости не нужны. - генерируется на основе характеристик.
0
|
||
|
16 / 10 / 4
Регистрация: 16.12.2017
Сообщений: 281
|
|
| 26.09.2019, 00:19 [ТС] | |
|
0
|
|
| 26.09.2019, 00:19 | |
|
Не могу получить связанные данные из БД
Добавить данные в связанные таблицы postgres Как вывести связанные данные из модели? Не правильно отображаются связанные данные из БД в DataGridview Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|