2012-12-05 37 views
0

ASP MVC應用程序。在控制器中,我從數據庫中獲取2行,並根據需要比較它們並添加新數據。每個模型如下所示:向db/model添加新行,同時避免「收集被修改」錯誤

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)的方法,所以如果有人可以推薦一個方法並指向我一個很好的教程,那會很棒。謝謝。

回答

0

可能最簡單的方法是先獲取所有匹配的記錄。 然後把它們放到一個臨時集合中,然後循環並調用 existingRecord.PersonAlias.Add。

你正在做的是確實試圖修改集合,而它正在迭代。