2011-01-10 100 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