2016-11-03 87 views
2

看到我的代碼實體框架:如何在foreach循環更新子數據

using (var db = new TestDBContext()) 
    { 
     var existingCustomer = db.Customer 
     .Include(a => a.Addresses.Select(x=> x.Contacts)) 
     .FirstOrDefault(p => p.CustomerID == 5); 

     existingCustomer.FirstName = "Test Customer122"; 

     foreach (var Custaddress in existingCustomer.Addresses.FirstOrDefault(a => a.AddressID == 5)) 
     { 
      //Custaddress. 
     } 
    } 

在foreach提高錯誤

foreach語句無法在類型 「EFTest.Addresses」的變量操作,因爲' 「EFTest.Addresses」不包含 「GetEnumerator」的公共定義

我想設置子實體foreach循環中的數據和更新結果父母和孩子都將被更新。請讓我朝正確的方向完成這項工作。

+0

apparantly'EFTest.Addresses'是不可枚舉。按照慣例,您應該在調用saveChanges之前將孩子的狀態設置爲已修改狀態。 –

+1

運行foreach循環的意義是什麼,因爲FirstOrDefault會有最大的一個項目? –

+0

'existingCustomer.Addresses.FirstOrDefault(...)'不是可枚舉的。 – Maarten

回答

2

這是因爲.FirstOrDefault返回類型源的一個對象的方法中,不是列表:

https://msdn.microsoft.com/en-us/library/bb340482(v=vs.110).aspx

嘗試:

using (var db = new TestDBContext()) 
    { 
     var existingCustomer = db.Customer 
     .Include(a => a.Addresses.Select(x=> x.Contacts)) 
     .FirstOrDefault(p => p.CustomerID == 5); 

     existingCustomer.FirstName = "Test Customer122"; 

     foreach (var custAddress in existingCustomer.Addresses.Where(a => a.AddressID == 5)) 
     { 
      //do stuff 
     } 

     db.SaveChanges(); 
    }