Ваш экземпляр dataContext (с именем db) будет захватывать значение идентификатора, сгенерированное базой данных во время вставки.Если другой пользователь изменяет значение после этой точки, вы не только не увидите его, но и экземпляр DataContext выдаст вам устаревшее значение при запросе!Это имеет смысл, если вы думаете о том, как DataContext должен выполнять отслеживание объектов для изменения данных.
Если вы пытаетесь добавить родительскую запись, а затем добавить дочернюю запись «безопасным» (атомарным) способом, сделайте это вместо этого:
Order o1 = new Order() {Date = DateTime.Now, Quantity = 3};
Order o2 = new Order() {Date = DateTime.Now, Quantity = 4};
Customer c1 = new Customer() {Name = "Bob"};
c1.Orders.Add(o1);
c1.Orders.Add(o2);
db.InsertOnSubmit(c1);
db.SubmitChanges();
Клиент и оба заказа будут вставлены в базу данных - все или ни одного (если их нет, вы получите исключение, объясняющее почему).Я использовал свойство отношений: Customer.Orders вместо идентификаторов.Это потому, что я не знаю, какие идентификаторы генерирует база данных.Также DataContext не знает.Но если вы изучите автоматически сгенерированный код Customer.Orders - вы увидите, что идентификатор управляется там.