Как выполнить вставку / обновление на стороне сервера из служб Silverlight RIA - PullRequest
1 голос
/ 23 сентября 2010

Хотя службы RIA кажутся очень хорошими для табличных операций и запросов, я застрял в одной традиционной ситуации обновления. UPSERT (Обновите, если существует, иначе Вставьте новый):

Во-первых: я хочу добавить запись на стороне сервера, если запись еще не существует, в противном случае, если она уже существует, я хочу обновить одно из ее текущих значений поля.

Второе: я не хочу запрашивать базу данных со стороны клиента, чтобы узнать, существует ли запись. Я просто хочу вызвать метод "UpsertData" в службах RIA, чтобы добавление или обновление происходили только на стороне сервера.

Я перепробовал много вариантов, наиболее близкий к которому я использовал метод [Update (UsingCustomMethod = true)], передавая вновь созданный (поэтому отсоединенный) объект. При вызове метода с моим объектом я получаю: « Пользовательский метод не может быть вызван для отдельного объекта. »

Предложения по лучшему способу сделать это были бы оценены:)

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

ОК, у меня есть решение. Я не уверен, что это правильный способ сделать это, поэтому буду ждать подтверждения от вас.

По сути, я переопределяю метод вставки служб RIA по умолчанию и заставляю его выполнять проверку существующих записей (как и любую другую проверку бизнес-правил):

Код на стороне клиента для выполнения Upsert:

  • Создать контекст домена
  • Создать новую запись, которая может уже существовать
  • Добавить новый элемент в контекст домена (в соответствующую таблицу)
  • Отправьте изменения (фактически запросите 1 вставку записи).

Код серверной стороны:

  • Заменить существующий метод InsertTypeX (объект TypeX).
  • Попросите метод InsertTypeX проверить существующую запись.
  • Если существует существующая запись, обновите необходимые поля в этой записи.
  • Если запись не существует, используйте AddObject, чтобы добавить объект в таблицу EF.

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

0 голосов
/ 01 февраля 2011

Я просто создаю инструкцию MERGE в хранимой процедуре и затем сопоставляю функцию import, чтобы ничего не возвращать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...