向db / model添加新行,同时避免“收集被修改”错误

时间:2012-12-05 21:03:15

标签: asp.net-mvc linq entity-framework

ASP MVC应用。在控制器中,我从数据库中获取2行,比较它们并根据需要添加新数据。每个模型看起来像这样:

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Gender { get; set; }

    public List<PersonAlias> AliasList { get; set; }
    public List<Identification> IDList { get; set; }

当我到达列表时,我遇到了麻烦。我很喜欢循环和比较,但添加有问题。这就是我所拥有的:

        var newRecord =
                (from p in db.Person
                 where p.ApplicantID.Equals(ApplicantId)
                 select p).First();

        //  Get the existing applicant record
        var existingRecord =
                (from e in e_db.PersonAttributes
                 where e.PersonID.Equals(PersonId)
                 select e).First();

        foreach (var newAlias in newRecord.PersonAlias)
        {
            matchesAny = true;

            List<PersonAlia> tempAlias = new List<PersonAlia>();

            if ( existingRecord.PersonAlias != null)
            {
                foreach (var oldAlias in existingRecord.PersonAlias)
                {
                    if ((oldAlias.FirstName != newAlias.FirstNameAlias) || (oldAlias.LastName != newAlias.LastNameAlias))
                    {
                        matchesAny = false;
                    }

                    if (!matchesAny)
                    {

                        tempAlias.Add(new PersonAlia
                        {
                            FirstName = newAlias.FirstNameAlias,
                            MiddleName = newAlias.MiddleNameAlias,
                            LastName = newAlias.LastNameAlias,
                            CreatedBy = User.Identity.Name,
                            CreateDate = DateTime.Now,
                            ModifiedBy = User.Identity.Name,
                            ModifiedDate = DateTime.Now
                        });
                    }
                } // End inner foreach

                existingRecord.PersonAlias.Add(new PersonAlia
                {
                    FirstName = tempAlias.
                    MiddleName = newAlias.MiddleNameAlias,
                    LastName = newAlias.LastNameAlias,
                    CreatedBy = User.Identity.Name,
                    CreateDate = DateTime.Now,
                    ModifiedBy = User.Identity.Name,
                    ModifiedDate = DateTime.Now
                });

            } // End outer Foreach

我正在尝试将项目添加到列表中的临时列表中,这似乎没问题,但我无法弄清楚如何从临时列表移动到将其添加到existingRecord。完成后,我将添加db.savechanges();

我认为我混合了几种方法(模型,linq,EF),所以如果有人可以推荐一个methoid并指向我一个好的教程,那就太好了。谢谢。

1 个答案:

答案 0 :(得分:0)

实现此目的的最简单方法可能是首先获取所有匹配的记录。 然后将它们放入临时集合中,然后循环遍历并调用 existingRecord.PersonAlias.Add。

你正在做的是确实在迭代过程中修改一个集合。