Как использовать Entity Framework для приложений со многими клиентами - PullRequest
0 голосов
/ 04 января 2019

Я создал приложение, которое управляет отелями, номерами, бронированием и клиентами. В первой версии я использовал чистые команды MySQL для взаимодействия с базой данных и работал отлично, но это было довольно сложно реализовать, в основном, когда мне нужно было изменить имя свойства или порядок в базе данных и относительное командование в сложных объектах, и также не спешил принимать результат. Поэтому я попытался реализовать это с помощью Entity Framework. С тех пор я столкнулся со слишком многими проблемами, которые я пытаюсь обойти. Во-первых, мое приложение используется двумя клиентами, и мне нужны данные для синхронизации. EF кэширует данные для более быстрых результатов, даже если они изменяются в БД. Насколько я знаю, EF не проверяет актуальность данных, и решения, которые я нашел для этого, были:

  1. чтобы перезагрузить или отключить каждую отдельную сущность - что-то плохое, имея 300 комнат или 2000 клиентов
  2. для удаления и воссоздания контекста - это то, что я пытался сделать, но это кажется трудным для реализации, потому что мое приложение может иметь 3 или 4 окна одновременно, а затем мне нужно перезагрузить ItemSource в каждом Combobox и перечислить иначе когда я использую его снова, генерируются исключения, такие как «контекст утилизирован» или «изменения сущностей отслеживаются многими трекерами» или «внешний ключ не раскрывается» и т. д. Также таким образом вы теряете трекер изменений.

Другая большая проблема заключается в том, что когда я некоторое время не использую свое приложение, а затем обращаюсь к свойству объекта, который пытается получить его из-за отложенной загрузки, оно может завершиться сбоем, если истечет время ожидания соединения или команды. Возможно, это можно решить с помощью обработки исключений, но я подумал, что EF может управлять такими вещами.

Дело в том, что мне нужен трекер изменений для обновления сущностей, я также использую MVVMlight и универсальный репозиторий, который я нашел в интернете с UnitOfWork. https://cpratt.co/truly-generic-repository/

Мое приложение - WPF 4.7.2

Есть какие-нибудь предложения? Должен ли я использовать какой-то другой фреймворк для связи с БД? Должен ли я использовать другой вид БД? Другой язык программирования?

Другой

1 Ответ

0 голосов
/ 04 января 2019

Я знаю, что вы не захотите это слышать, но нет единого ответа на этот вопрос.Люди посвящают всю свою карьеру, пытаясь решить подобные проблемы.

Я работаю в авиационной отрасли, где у нас есть буквально тысячи киосков, терминалов, приложений для мобильных телефонов и т. Д. По всему миру, которые одновременно получают доступ к одной и той же базе данных.многие из них нуждаются в общении в реальном времени, несмотря на то, что они сидят за некоторыми самыми жесткими брандмауэрами ... и самыми слабыми сетями аэропортов ... вы когда-либо увидитеВ качестве очень грубого руководства я склонен раскрывать базу данных через веб-сервер, и через него все связывается.Для вещей в реальном времени я использую WebSockets (которые могут быть смоделированы с помощью длинного опроса, когда сеть не поддерживает это), но некритические вещи обычно могут обрабатываться с помощью базовых вызовов REST;обе эти технологии имеют достаточную поддержку JavaScript, что важно, когда (не если) вы в конечном итоге разрабатываете какие-либо компоненты веб-приложений.Вообще говоря, я держусь подальше от SOAP;если вы уже управляете обеими сторонами коммуникационного канала, то нет смысла добавлять дополнительную сложность, если у вас нет причин для этого.

Преимущество таких действий заключается в том, что вы получаете один проект, содержащий все вашимодели, которыми пользуются все ваши проекты, это, в свою очередь, приводит к превосходной безопасности типов и повторному использованию кода.Сериализация между вашими компонентами, как правило, обрабатывается для вас автоматически .NET, и очень просто подвергнуть слой базы данных стресс-тестированию в реальной среде.У вас также есть централизованная точка для ведения журнала и генерации отчетов, которую ваши клиенты захотят в какой-то момент (аналитика - это целое поле для себя).С другой стороны, добавление выделенного сервера добавляет дополнительную сложность и потенциальные точки отказа, и если вам придется размещать его локально, это усложнит ваши процедуры установки и, возможно, также конфигурацию сети ваших клиентов.

Это один ответ, есть еще много.И как только вы начинаете сталкиваться с такими проблемами, как загрузка сервера и избыточность, все становится очень «интересным» ...

...