Метод UpdateOrAdd в репозитории + шаблон UnitOfWork - PullRequest
1 голос
/ 14 ноября 2011

Допустимо ли добавлять метод UpdateOrAdd в шаблон репозитория или, возможно, UpdateMethod с параметром AddIfNoExists?

Я хочу добавить такой метод, чтобы упростить использование od DataServices.

Например: код клиента показывает данные в сетке .. затем клиент отправляет все данные в UpdateMethod хранилища ... затем хранилище выясняет, какие данные были добавлены и какие данные были изменены.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

От вас зависит, как будет выглядеть публичный интерфейс вашего репозитория. Если вам нужен один метод как для вставки, так и для обновления, вы, конечно, можете выставить его, но вы должны правильно обработать поведение при реализации метода - EF не поможет вам с этим, потому что ожидает отдельных вызовов для вставок и обновлений.

0 голосов
/ 14 ноября 2011

Я всегда создаю один метод в репозитории, который называется Add, он добавляет новый объект, если он новый, и обновляет объект, если он существует, но сохраняет или обновляет его, не принадлежа репозиторию, потому что репозиторий не отслеживал состояние икакой новый или какой существовавший ранее, это принадлежит к единице работы, вот почему шаблон единицы работы говорит о том, что вы должны отслеживать то, что вы изменили;в противном случае эти данные не будут записаны обратно в базу данных. Поэтому вам потребуется добавить этот метод в единицу рабочего класса в зависимости от вашего подхода ORM или вашего DAL. Поэтому единица работы будет отслеживать

  • Новые объекты
  • Грязные объекты
  • Удалить объект

И в конце вы получите

  • Commit (Сохранить) ->добавить новый и обновить существующий или
  • Откат
...