When adding a child LINQ object through its parent object's
collection, this does not mean that the object is immediately available through
the data context. For instance, take a look at the following code.
Listing 3
Customer customer = _context.Customers.First();
customer.Orders.Add(order);
Assert.AreEqual(1, customer.Orders.Count());
Assert.AreEqual(++changeCount, _context.GetChangeSet().Inserts.Count);
Assert.AreEqual(0, _context.Orders.Count());
Even though the object is added to the customer's orders
collection, the order is not immediately available through the DataContext
object (represented by the "_context" variable). Rather, it is listed
in the ChangeSet object returned from the GetChangeSet() method. The ChangeSet
object contains a collection of the inserted, deleted, and updated objects not
yet submitted to the database, which this orders object is one of them. After
the following:
Listing 4
_context.SubmitChanges();
Assert.AreEqual(0, _context.GetChangeSet().Inserts.Count());
Assert.AreEqual(1, customer.Orders.Count());
Assert.IsNotNull(customer.Orders.SingleOrDefault(o =>
o.ReferenceNumber == "X4590X"));
The order being added is no longer in the change set; it is
not a child of the customer object and readily available in the orders table.