我有两个实体之间的多对多关系。 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然后重新分配新的UserInfoCampaigns?或者有一种更优化的方式来更新UserInfo活动而不首先使用LINQ to SQL删除它们?
非常感谢。
答案 0 :(得分:1)
通常,您将删除它们并重新创建它们。这就是我处理这种情况的方式。
答案 1 :(得分:0)
如果你去了(全部删除)解决方案,那么你可能会认为你的表中的id会以无连续形式增加(我假设你的PK是一个int),如果你不关心那么删除它们然后重新添加
如果您希望身份处于续订状态,您可以在广告系列表格中设置一个标记(IsDeleted),将广告系列视为已删除,您可以在用户删除广告系列时将其设置为ture,并在用户设置为false从UI中重新选择它可以确保更少的记录,但在代码中需要更多的工作
答案 2 :(得分:0)
通常,我们只是让SQL处理它。您可以在SQL中为关系指定ON DELETE
,可以CASCADE
或SET DEFAULT
或SET NULL
,具体取决于您想要的行为。
以下是ON DELETE CASCADE
的示例:
http://www.codeproject.com/KB/cs/CascadingDeletes_cs.aspx