2011-01-10 193 views
2

我有2個實體之間的多對多關係。 UserInfo和Campaign和第三張表UserInfoCampaignsLinq To Sql ManyToMany更新現有記錄

在前端,用戶應該能夠通過使用多個複選框來更新用戶活動。

所以我必須:

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刪除它們?

非常感謝。

回答

1

通常,您會刪除它們並重新創建它們。這就是我處理這種多對多情況的方式。

+0

這是最簡單的方法。它解決了爲刪除的記錄提交刪除的問題。否則,你會堅持一個擁有幾個用戶界面的活動,但任何舊的,應該刪除的用戶界面將無限期地保留。 – 2011-01-11 00:16:45

0

如果你選擇了(全部刪除)解決方案,那麼你可能會認爲你的表中的ID會增加,但是沒有任何延續形式(我假設你的PK是一個int),如果你不關心那個,他們然後重新添加

如果您希望身份處於繼續狀態,您可以在您的廣告系列表中設置一個標誌(IsDeleted),該標誌將廣告系列引用爲已刪除,您可以在用戶刪除廣告系列時將其設置爲true並在用戶從UI重新選擇它時將其設置爲false,這確保了更少的記錄,但需要在代碼中進行更多的工作

+1

爲什麼你會關注連續PK? – 2011-01-11 00:14:47