Я создаю приложение ASP.NET MVC, в котором я использую следующий поток:
Получить Entity
- Выполнить действие на контроллере
- Извлечение данных из FactoryClass, который работает с моделью (Entity Framework)
- Получить данные обратно к действию в контроллере
- Использование AutoMapper для перевода из объекта Model в объект ModelView
- Вернуть объект ModelView в строго типизированное представление
Обновление объекта
- Запустить действие с Entity ModelView в качестве входных данных (будет использоваться DefaultDataBinder)
- Проверка сущности ModelView
- Отправьте объект ModelView непосредственно на правильный фабричный метод.
- Проверьте, есть ли у объекта ModelView идентификатор и, если да, извлеките объект Model из базы данных
- Используйте AutoMapper для преобразования входящего объекта ModelView в объект / объект Model. Если это обновление, используйте выбранный объект Model в качестве пункта назначения.
- Если это обновление, используйте Refresh Client. В других случаях используйте Add
- Запустите SaveChanges и вернитесь к контроллеру.
Задача 1
Классы ModelView специально созданы для представлений, с которыми связаны действия контроллера (они могут содержать как объекты, так и списки). Обычно несколько действий с различными представлениями используют один и тот же класс ModelView, что означает, что не все объекты в объекте ModelView будут использоваться в каждом действии / представлении.
Пока представление использует все свойства ModelViewObjects, которые могут быть обновлены, проблем нет, но ...
Скажем, что мы получили представление, в котором некоторые свойства ModelViewObject не используются, этот ModelViewObject отправляется на фабрику (будет обновляться), где выбирается соответствующий объект ModelObject (из структуры db / entity), а затем объединяется с ModelViewObject с AutoMapper. Проблема в том, что свойства ModelViewObject, которые не установлены (не используются в представлении), приведут к перезаписи реальных данных в ModelObject.
Чтобы решить эту проблему, обычно используйте AutoMapper ForMember Ignor (), но это будет проблемой, когда полный ModelViewObject (все установленные свойства) обновит БД.
Как вы справляетесь с этим? Есть ли у вас разные способы обновления в коэффициентах, где разные настройки AutoMapper?
Было бы неплохо, если бы у меня был только такой метод: UpdateMyEnityt (сущность MyEntity), и этот метид обновит или добавит объект MyEntity.
Задача 2
Где я должен разместить сопоставления AutoMapper? До сих пор я поместил Updates на заводе и Get в контроллере. Я думал о размещении отображений в ModelViewObject, например ModelViewObject.ToDataModel, но если мне не нужен полный перевод (свойства som должны игнорироваться), то мне придется сделать этот AutoMapper где-нибудь еще.
Как вы справляетесь с этим?
Задача 3
Скажем, у вас есть рабочий метод обновления в нашем классе фабрики, где вы используете AutoMapper с игнорирующими сомами для преобразования ModelViewObject в ModelView (объект каркаса сущности). Скажем, теперь, когда мы обновляем таблицу базы данных новым полем / Property, если мы запускаем представление, которое обрабатывает ModelViewObject, отвечающий этой таблице, но не обрабатывают новое свойство, это будет означать, что свойство всегда будет установлено в значение null / string. пустой / 0. При запуске обычного метода обновления на заводе, это свойство не будет игнорироваться, и это означает, что нулевое значение заменит реальное значение.
Это большой риск, что такого рода обновления будут сделаны, и большой риск, что я не забуду обработать это в старом коде.
Как мне справиться с этим?
Задача 4
У utoMapper есть метод проверки, в котором вы можете проверить, возможно ли сопоставление, прямо сейчас у меня есть эти проверки, где сопоставление выполнено. Должен ли я поместить это в какой-то другой метод, где проверка будет выполняться так же быстро, как запускается приложение ? Остальные проблемы в отображениях будут отображаться первыми при использовании функции.
BestRegards