Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到Sql许多更新现有记录_C#_Linq_Linq To Sql_Many To Many - Fatal编程技术网

C# Linq到Sql许多更新现有记录

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

我有两个实体之间的多对多关系。 UserInfo和Campaign以及第三个表UserInfoCampaigns

在前端,用户应该能够使用多个复选框更新用户活动

因此,我:

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将无限期保留。