Краткий ответ: Нет, это даже невозможно
Ладно ... так:
- Сгенерированные ключи отражаются в клиенте.
- Вы можете выполнить одну операцию SaveChanges с помощью DataServiceContext. SaveChanges ( SaveChangesOption.Batch )
Но, к сожалению, вы ничего не можете сделать, чтобы привязать один запрос к ответу другого и объединить их в одну транзакцию.
Однако ...
Если вы измените модель, создав метод CustomerAuditLog, производный от AuditLog:
// Create and insert customer ...
// Create audit log and relate to un-insert customer
CustomerAuditLog al = new CustomerAuditLog();
al.EntryDateTime = DateTime.Now;
al.Description = string.Format("Created customer with {Customer.ID}");
// assuming your entities implement INotifyPropertyChanging and you are using
// the Data Services Update to .NET 3.5 SP1 to use DataServiceCollection
// to notify the DataServiceContext that a relationship has been formed.
//
// If not you will manually need to tell Astoria about the relationship too.
al.Customer = c;
entities.AddToAuditLog(al);
entities.SaveChanges();
И наличие какой-то логики в глубине вашего базового источника данных или, возможно, даже базы данных для замены {Customer.ID} на соответствующее значение.
Возможно, вы сможете заставить его работать, потому что если две вставки происходят в одной и той же транзакции и одна (CustomerAuditLog) зависит от другой (Customer), они должны быть соответствующим образом упорядочены базовым источником данных.
Но, как вы можете видеть, этот подход довольно хакерский, вы не хотите, чтобы тип для каждого возможного контрольного сообщения был таким, как вы! И ... это может даже не сработать.
Надеюсь, это поможет
Alex
Служба обработки данных, Microsoft