Да , EF4 создаст новую транзакцию, если она еще не существует. См
http://msdn.microsoft.com/en-us/library/bb896325.aspx
Когда вы вызываете SaveChanges, если
текущая транзакция существует, сущность
Framework использует эту транзакцию для
операции с источником данных.
В противном случае это создает новый
транзакция для операции. Вы можете
определить транзакции с помощью
EntityTransaction, Transaction или
TransactionScope.
Нет , нет способа освободить отдельную сущность от транзакции.
Не уверен насчет вашего третьего вопроса - о том, можете ли вы полностью отключить транзакции, но я полагаю, что не на основе приведенной выше выдержки.
Я знаю, что это не тот ответ, который вы хотели услышать, но если вы хотите сохранить P2 независимо от того, успешно ли выполняется P1, вам нужно сохранить P2 в другом контексте объекта.