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();
}