| 
 | 
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Всем привет у меня есть сущность, которая используется в контексте данных Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Есть также "облегченный" DTO-вариант этой сущности, которая используется для внешнего обмена из сервиса Код: c# 1. 2. 3. 4. 5. 6. 7. 8. Соответственно у меня возникает вопрос конвертации при добавлении/редактировании экземпляров класса Entity=>EntityDto и наоборот. ///mapper Код: c# 1. 2. 3. 4. Когда приходит DtoEntity-я могу ее смапить в Entity c таким же ID. К сожалению это не подходит, потому что, чтобы сделать добавление в базу данных новую Entity, её необходимо сначала оттуда загрузить. В принципе я нашел способ, как в маппер инжектить dbContext и загружать сущности прямо из маппинга, но ввиду того, что в интернетах описание такой практики отсутствует+жесткое смешивание ответственностей, считаю такой способ реализации нежелательным. Второй вариант -это уже непосредственная сборка всей сущности(подгрузка связанных объектов по их ID) в контроллере или сервисе, что тоже плохо- потому что половина конвертации сущности из DtoEntity в Entity делается маппером, половина в другом месте- тоже погано получается. Возможно есть способ подсунуть EF Core только ID связанной сущности, а не подгружать её сначала, или как лучше организовать переход из DTO-объекта в объект, годный для сохранения в датаконтексте. Спасибо. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.10.2019, 16:34 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Например, используй Attach: Код: c# 1. 2. 3. 4. Но, лично я, скорее всего, все-таки, эту сущность (PropertyClass) загружал бы, если против этого нет веских причин (например, в виде критического по производительности куска кода). Потому что если снаружи придет направильный ID, то отловить и обработать нарушение FK в базе это будет намного тяжелее, чем проверить после загрузки значение на null. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.10.2019, 17:50 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  vb_subК сожалению это не подходит, потому что, чтобы сделать добавление в базу данных новую Entity, её  необходимо сначала оттуда загрузить.Необязательно, в общем-то. Можно присоединить к контексту. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.10.2019, 17:51 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.10.2019, 17:53 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  petalvikAutoMapper  какашко . Если лень набивать вручную код маппинга, его можно генерировать . Так и что вы предлагаете генерировать-то? Подгрузку связанных объектов по их ID? Внутри маппера? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.10.2019, 18:00 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  petalvikAutoMapper  какашко . Если лень набивать вручную код маппинга, его можно генерировать . Бред. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.10.2019, 18:00 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  vb_subК сожалению это не подходит, потому что, чтобы сделать добавление в базу данных новую Entity, её  необходимо сначала оттуда загрузить. Это неправда. Чтобы добавить новую Entity вы можете добавить свой экземпляр Entity в контектс, ничего не нужно загружать. vb_subВторой вариант -это уже непосредственная сборка всей сущности(подгрузка связанных объектов по их ID) в контроллере или сервисе, что тоже плохо- потому что половина конвертации сущности из DtoEntity в Entity делается маппером, половина в другом месте- тоже погано получается. Не второй, а правильный вариант, инкапсулировать работу с Entity в слое бизнес-логики. И полностью полагаться на какие-то мапперы для внесения изменений -- идея плохая. vb_subВозможно есть способ подсунуть EF Core только ID связанной сущности, а не подгружать её сначала, или как лучше организовать переход из DTO-объекта в объект, годный для сохранения в датаконтексте. Спасибо. Можно подсунуть ID связанной сущности, но это противоречит подходу EF, вы должны достать сущность и затем присоединить. Таким образом 1) гарантируется наличие связанной записи на уровне приложения 2) объект связанной сущности часто представляет часть агрегата и должен участвовать в процессе валидации на уровне приложения. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.10.2019, 22:34 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  fkthatpetalvikAutoMapper  какашко . Если лень набивать вручную код маппинга, его можно генерировать . Бред. фигня какая-то. AutoMapper умеет создавать весь маппинг автоматически. также есть динамический маппинг. в общем, эти погони за производительностью в случае маппинга напоминает больше борьбу с ветряными мельницами. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.10.2019, 22:35 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  hVosttМожно подсунуть ID связанной сущности, но это противоречит подходу EF, вы должны достать сущность и затем присоединить. Таким образом 1) гарантируется наличие связанной записи на уровне приложения 2) объект связанной сущности часто представляет часть агрегата и должен участвовать в процессе валидации на уровне приложения. Плюсую. Я выше о том же. hVosttAutoMapper умеет создавать весь маппинг автоматически. также есть динамический маппинг. в общем, эти погони за производительностью в случае маппинга напоминает больше борьбу с ветряными мельницами. Он компилирует меппинги (по умолчанию при первом вызове Map(), но можно сделать это и руками заранее), а потом уже использует откомпиленный код. Никакого рефлекшена там внутри нет. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.10.2019, 23:21 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  hVosttvb_subК сожалению это не подходит, потому что, чтобы сделать добавление в базу данных новую Entity, её  необходимо сначала оттуда загрузить. Это неправда. Чтобы добавить новую Entity вы можете добавить свой экземпляр Entity в контектс, ничего не нужно загружать. vb_subВторой вариант -это уже непосредственная сборка всей сущности(подгрузка связанных объектов по их ID) в контроллере или сервисе, что тоже плохо- потому что половина конвертации сущности из DtoEntity в Entity делается маппером, половина в другом месте- тоже погано получается. Не второй, а правильный вариант, инкапсулировать работу с Entity в слое бизнес-логики. И полностью полагаться на какие-то мапперы для внесения изменений -- идея плохая. vb_subВозможно есть способ подсунуть EF Core только ID связанной сущности, а не подгружать её сначала, или как лучше организовать переход из DTO-объекта в объект, годный для сохранения в датаконтексте. Спасибо. Можно подсунуть ID связанной сущности, но это противоречит подходу EF, вы должны достать сущность и затем присоединить. Таким образом 1) гарантируется наличие связанной записи на уровне приложения 2) объект связанной сущности часто представляет часть агрегата и должен участвовать в процессе валидации на уровне приложения. Получается мне в слой бизнес логики(контроллер=> сервис, который работает с датаконтекстом) нужно принимать DTO объект и там его уже преобразовывать в сущность? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 25.10.2019, 10:01 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  vb_subПолучается мне в слой бизнес логики(контроллер=> сервис, который работает с датаконтекстом) нужно принимать DTO объект и там его уже преобразовывать в сущность? Обычно так и делают. Модель -> DTO -> Сущность. Модель преобразуется в DTO в контроллере, DTO передается в слой БЛ, слой БЛ делает свою БЛ, преобразует DTO в сущность и передает её в EF. Это если пишется "классическая" многослойка. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 25.10.2019, 10:09 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  fkthat, а на каком уровне Вы используете маппер? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 25.10.2019, 10:11 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  vb_subfkthat, а на каком уровне Вы используете маппер? И в контролере (Модель -> DTO) и в БЛ (DTO -> Сущность). Еще, главное - никогда не пихай в автомеппер какую-либо логику - это не его работа. Ничего не мешает меппить просто то, что им легко отмеппить, остальное пускай сам сервис БЛ делает. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 25.10.2019, 10:17 | 
  
  
  
   | 
||
| 
 
AutoMapper + EF Core преобразование сущности-DTO в просто сущность 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  vb_subПолучается мне в слой бизнес логики(контроллер=> сервис, который работает с датаконтекстом) нужно принимать DTO объект и там его уже преобразовывать в сущность? Да ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 25.10.2019, 13:48 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=17&msg=39881138&tid=1349098]:  | 
    0ms | 
get settings:  | 
    9ms | 
get forum list:  | 
    12ms | 
check forum access:  | 
    3ms | 
check topic access:  | 
    3ms | 
track hit:  | 
    64ms | 
get topic data:  | 
    9ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    53ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 12ms | 
| total: | 169ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.