Как узнать, когда вставлять, удалять или обновлять на основе списка C #? - PullRequest
3 голосов
/ 02 сентября 2010

Допустим, у меня есть три таблицы "Person", "Area" и "Person_Area".Каждый человек может работать во многих областях, и в каждой области может быть много людей."person_Area" - это таблица-мост, которая содержит person_id и area_id

. В моем коде у меня есть два поля со списком asp, расположенных на форме человека.Первый список содержит все доступные области, а второй список может быть заполнен областями из первого списка на основе выбора пользователя.Области, которые помещаются во второй список, - это области, в которых находится человек.

Это все легко и просто, но когда я решаю сохранить в своей базе данных, я не уверен, как вставить, обновить, удалитьтаблица "person_Area".Я не хочу повторно вставлять область для человека, если она уже есть в таблице и если пользователь удаляет область из списка два, откуда знает код, чтобы удалить ее, когда я отправляю сообщение обратно на сервер?

Разумно ли было бы просто удалить все записи в таблице «Person_Area» для конкретного человека, а затем повторно добавить все текущие выбранные пользователем?или есть лучший вариант?Я в тупике.

Ответы [ 2 ]

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

Нет причин для удаления и повторной вставки.Много работать, когда вы даже не знаете наверняка, изменились ли какие-либо из этих строк.

На мой взгляд, есть два разумных варианта:

  1. Track "изменяет пользовательский интерфейс (добавляет область, удаляет область), затем выполняет те же действия (удаление строки, добавление строки) в отношении базы данных.(Вы должны будете учесть случай, когда кто-то добавляет область, затем удаляет ее, прежде чем нажать SAVE, или наоборот. Просто отмените свой внутренний флаг, не делайте INSERT, а DELETE)

  2. Просто запросите таблицу person_area для этого пользователя в некотором логическом порядке (так же, как упорядочен список).Затем пройдитесь по строкам набора записей и списка по одному.Если в базе данных есть строка, которой нет в списке, выполните УДАЛЕНИЕ.Если в списке есть запись, которой нет в базе данных, выполните INSERT.

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

0 голосов
/ 02 сентября 2010

Если вы используете систему базы данных, которая имеет команду MERGE, это будет хорошим подходом.Команда MERGE может обрабатывать действия INSERT, UPDATE и DELETE в одной команде на основе сравнения вашего списка с содержимым таблицы.

...