C# Linq到Sql许多更新现有记录
我有两个实体之间的多对多关系。 UserInfo和Campaign以及第三个表UserInfoCampaigns 在前端,用户应该能够使用多个复选框更新用户活动 因此,我:C# Linq到Sql许多更新现有记录,c#,linq,linq-to-sql,many-to-many,C#,Linq,Linq To Sql,Many To Many,我有两个实体之间的多对多关系。 UserInfo和Campaign以及第三个表UserInfoCampaigns 在前端,用户应该能够使用多个复选框更新用户活动 因此,我: var selectedCampaignsIds=newint[]{1,2,3} var user=\u extendederUserService.GetUser(新Guid(userId)) var newCampaigns=\u activityRepository.getAllActivationsByIds(Sel
var selectedCampaignsIds=newint[]{1,2,3}
var user=\u extendederUserService.GetUser(新Guid(userId))代码>
var newCampaigns=\u activityRepository.getAllActivationsByIds(SelectedActivationSids)代码>
我可以通过以下方式分配新选择的活动:
foreach (var campaign in newCampaigns)
{
var userInfoCampaign = new UserInfoCampaign { UserInfoId = user.Id, CampaignId = campaign.Id };
_campaignrepository.SaveUserInfoCampaign(userInfoCampaign);
}
我的问题是,考虑到用户可能有或可能没有现有的活动,我如何更新UserInfo活动
我是否删除所有现有的UserInfoCampaigns,然后重新分配新的?或者有一种更新UserInfo活动而不首先使用linqtosql删除它们的更为优化的方法
非常感谢。通常,您会删除它们并重新创建它们。这就是我处理这种情况的方法。 < P>如果你去(删除所有)解决方案,那么你可能会认为IDS会在你的表中以无连续的形式增加(我假设你的PK是一个int),如果你不关心它,那么删除它们,然后重新添加
如果您希望标识以连续形式显示,您可以在活动表中设置一个标志(IsDeleted),该标志将活动表示为已删除,用户删除活动时将其设置为True,用户从UI重新选择活动时将其设置为false,这样可以减少记录数量,但通常需要在代码中进行更多的工作,我们只是让SQL来处理它。您可以在SQL中的关系中指定ON DELETE
,您可以CASCADE
或SET DEFAULT
或SET NULL
,具体取决于您想要的行为
下面是关于删除级联的示例:
你为什么会担心持续PK?这是最简单的方法。它解决了为删除的记录提交删除的问题。否则,您将持续一个包含(比如)几个userinfos的活动,但任何旧的、应该删除的userinfos将无限期保留。