Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 在EntityFramework中从DTO同步列表_C#_.net_Entity Framework_Entity Framework Core - Fatal编程技术网

C# 在EntityFramework中从DTO同步列表

C# 在EntityFramework中从DTO同步列表,c#,.net,entity-framework,entity-framework-core,C#,.net,Entity Framework,Entity Framework Core,我在用户和组之间存在多对多关系 my API中的一个操作允许客户端更新用户所属的组。方法如下: public void UpdateUserMembership(int userId, IList<int> groupIds) { var user = dbContext.Users .Include(u => u.Groups) .First(u => u.Id == userId);

我在
用户
之间存在多对多关系

my API中的一个操作允许客户端更新
用户所属的
组。方法如下:

public void UpdateUserMembership(int userId, IList<int> groupIds) 
{
    var user = dbContext.Users
                  .Include(u => u.Groups)
                  .First(u => u.Id == userId);

    var currentGroups = user.Groups;

    // TODO: Sync between the list of ids in groups and currentGroups

    dbContext.SaveChanges();
}

注意2:我正在使用Entity Framework Core 2

首先,您可以确定将插入和删除的用户组实体。然后您可以像这样对这些实体执行数据库操作

        public void UpdateUserMembership(int userId, IList<int> groupIds)
        {
            var user = dbContext.Users
                .Include(u => u.Groups)
                .First(u => u.Id == userId);

            var currentGroups = user.Groups;

            var groupsWhichWillDeleted = currentGroups.Where(x => !groupIds.Contains(x.GroupId)).ToList();
            var groupsWhichWillInserted = groupIds.Where(x => !currentGroups.Any(c => c.GroupId == x)).ToList();

            foreach (var deletedGroup in groupsWhichWillDeleted)
            {
                dbContext.UserGroups.Remove(deletedGroup);
            }
            foreach (var insertedGroupId in groupsWhichWillInserted)
            {
                var userGroup = new UserGroup { UserId = userId, GroupId = insertedGroupId };
                dbContext.UserGroups.Add(userGroup);
            }
            dbContext.SaveChanges();
        }
public void UpdateUserMembership(int-userId,IList-groupid)
{
var user=dbContext.Users
.包括(u=>u组)
.First(u=>u.Id==userId);
var currentGroups=user.Groups;
var groupsWhichWillDeleted=currentGroups.Where(x=>!groupIds.Contains(x.GroupId)).ToList();
var groupsWhichWillInserted=GroupId.Where(x=>!currentGroups.Any(c=>c.GroupId==x)).ToList();
foreach(已删除的组中的变量deletedGroup)
{
dbContext.UserGroups.Remove(deletedGroup);
}
foreach(插入WILLINSERTED的组中的var insertedGroupId)
{
var userGroup=new userGroup{UserId=UserId,GroupId=insertedGroupId};
dbContext.UserGroups.Add(userGroup);
}
dbContext.SaveChanges();
}

您可以将两个列表之间的差异保存到表中。我还没有测试,可能有不准确的代码

public void UpdateUserMembership(int userId, IList<int> groupIds)
{
    var user = dbContext.Users
                  .Include(u => u.Groups)
                  .First(u => u.Id == userId);

    var diffIdList = groupIds.Except(user.Groups.SelectMany(x => x.GroupId)).ToList();

    foreach (var groupId in diffIdList)
    {
        var userGroup = new UserGroup { UserId = userId, GroupId = groupId };
        dbContext.UserGroups.Add(userGroup);
    }

    dbContext.SaveChanges();
}
public void UpdateUserMembership(int-userId,IList-groupid)
{
var user=dbContext.Users
.包括(u=>u组)
.First(u=>u.Id==userId);
var diffIdList=GroupId.Except(user.Groups.SelectMany(x=>x.GroupId)).ToList();
foreach(diffIdList中的var groupId)
{
var userGroup=new userGroup{UserId=UserId,GroupId=GroupId};
dbContext.UserGroups.Add(userGroup);
}
dbContext.SaveChanges();
}
public void UpdateUserMembership(int userId, IList<int> groupIds)
{
    var user = dbContext.Users
                  .Include(u => u.Groups)
                  .First(u => u.Id == userId);

    var diffIdList = groupIds.Except(user.Groups.SelectMany(x => x.GroupId)).ToList();

    foreach (var groupId in diffIdList)
    {
        var userGroup = new UserGroup { UserId = userId, GroupId = groupId };
        dbContext.UserGroups.Add(userGroup);
    }

    dbContext.SaveChanges();
}