Linq To Sql ManyToMany Обновление существующих записей - PullRequest
2 голосов
/ 10 января 2011

У меня много-много отношений между двумя сущностями.UserInfo и Campaign и третья таблица UserInfoCampaigns

На внешнем интерфейсе пользователь должен иметь возможность обновлять кампании пользователя, используя несколько флажков.

Итак, у меня есть:

var selectedCampaignsIds = new int[] {1,2,3}

var user = _extendedUserService.GetUser(new Guid(userId));

var newCampaigns =_campaignrepository.GetAllCampaignsByIds(selectedCampaignsIds);

Я могу назначить новые выбранные кампании следующим образом:

foreach (var campaign in newCampaigns)
{
    var userInfoCampaign = new UserInfoCampaign { UserInfoId = user.Id, CampaignId = campaign.Id };
    _campaignrepository.SaveUserInfoCampaign(userInfoCampaign);
}

У меня вопрос, как мнеобновить кампании UserInfo, учитывая, что пользователь может иметь или не иметь существующие кампании?

Удалить ли все существующие UserInfoCampaigns и затем переназначить новые?Или есть более оптимальный способ обновления кампаний UserInfo без их предварительного удаления с использованием LINQ to SQL?

Большое спасибо.

Ответы [ 3 ]

1 голос
/ 10 января 2011

Обычно вы их удаляете и воссоздаете. Именно так я справляюсь с такой ситуацией многих со многими.

0 голосов
/ 10 января 2011

Как правило, мы просто позволяем SQL обрабатывать это. Вы можете указать ON DELETE для отношений в SQL, вы можете CASCADE или SET DEFAULT или SET NULL в зависимости от того, какое поведение вы хотите.

Вот пример для ON DELETE CASCADE: http://www.codeproject.com/KB/cs/CascadingDeletes_cs.aspx

0 голосов
/ 10 января 2011

Если вы выбрали (Удалить все) решение, вы можете подумать, что идентификаторы в вашей таблице увеличатся в виде ни одного продолжения (я предполагаю, что ваш PK является целым), если вас это не волнует, то удалите ихзатем повторно добавьте

, если вы хотите, чтобы личность была в форме продолжения, вы можете установить флаг (IsDeleted) в таблице своих кампаний, который ссылается на кампанию как удаленную, вы установите его на время, когда пользователь удалитКампания и установите его в ложь, когда пользователь повторно выбирает его из пользовательского интерфейса, это гарантирует меньше записей, но требует больше работы в вашем коде

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