По умолчанию SaveChanges будет выполняться в транзакции (см. Замечания, часть в документации)
Если вы хотите больше контроля над транзакцией, вы можете обернуть свой блок savechanges в TransactionScope. Затем SaveChanges заберет вашу транзакцию и будет использовать ее.
Это может быть полезно, когда вы хотите распределенную транзакцию (например, с несколькими контекстами или если вы используете WCF).
Как вы упомянули, что вы используете разные модели, вы должны использовать оба ObjectContexts в пределах одного TransactionScope (и использовать некоторую логику с AcceptAllChanges)
Ваш код будет выглядеть так:
using (TransactionScope scope = new TransactionScope())
{
//Do something with context1
//Do something with context2
//Save Changes but don't discard yet
context1.SaveChanges(false);
//Save Changes but don't discard yet
context2.SaveChanges(false);
//if we get here things are looking good.
scope.Complete();
//If we get here it is save to accept all changes.
context1.AcceptAllChanges();
context2.AcceptAllChanges();
}