保存在数据库中时未添加到多个列表的项目。

时间:2016-10-24 20:42:34

标签: asp.net-mvc linq

我的MVC应用程序中的控制器上有以下代码:

        public void BulkUpdateGroupResident(List<TherapyGroup> therapyGroups)
        {
            foreach(var group in therapyGroups)
            {
                using (var context = new ResidentFirstDBContext())
                {
                    var currentGroup = context.TherapyGroups.Where(g => g.ID == group.ID).FirstOrDefault();
                    if (group == null)
                    {
                        throw new HttpResponseException(HttpStatusCode.NotFound);
                    }
                    if (currentGroup.Residents == null)
                    {
                        currentGroup.Residents = new List<Resident>();
                    }
                    currentGroup.Residents.Clear();
                    foreach (var id in group.ResidentsId)
                    {
                        var resident = context.Residents.Where(r => r.ID.ToString() == id.ToString()).FirstOrDefault();
                        if (resident == null)
                        {
                            throw new HttpResponseException(HttpStatusCode.NotFound);
                        }
                        currentGroup.Residents.Add(resident);

                    }
                    context.Entry(currentGroup).State = EntityState.Modified;
                    context.SaveChanges();
                }

            }

        }

预期的功能是它从Post向控制器获取治疗组对象(当前存储居民和groupid),然后它应该采取这些值并将居民添加到居民列表中特定群体;但是,我有一个问题,因为在保存到数据库时,代码似乎不会将居民推入所有正确的组。事实上,我已经确定它只会将它们推入最后选定的组;但是,如果添加到两个后续组的居民是相同的,则只会发生这种情况。例如,我想将John添加到两个不同的组同时不起作用。我知道将同一个对象推入不同的列表是有意义的,但我不知道如何解决这个问题。任何帮助表示赞赏。另外,我的TherapyGroup Model的Model代码如下。它可能会帮助您理解。基本上,我们感兴趣的是模型上的List,它指向另一个对象。

public class TherapyGroup
{
    public Guid ID { get; set; }
    public List<Resident> Residents { get; set; }
}

0 个答案:

没有答案