实体框架:如何在foreach循环中更新子数据

时间:2016-11-03 12:21:03

标签: c# entity-framework

查看我的代码

    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 raise错误

  

foreach语句不能对类型的变量进行操作   'EFTest.Addresses'因为'EFTest.Addresses'不包含   'GetEnumerator'的公共定义

我想在foreach循环中设置子实体数据并以这样的方式更新,结果父和子都将被更新。请带我到正确的方向来完成这项工作。

1 个答案:

答案 0 :(得分:2)

那是因为.FirstOrDefault方法返回一个source类型的对象,而不是一个列表:

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