Ответ 1
По умолчанию транзакция имеет IsolationLevel Serializable. Сериализуемый - самый высокий уровень. Для этого требуется, чтобы транзакция завершилась до того, как любая другая транзакция разрешила работать с данными.
Он имеет следующие ограничения:
- Заявления не могут читать данные, которые были изменены, но еще не были совершенные другими транзакциями.
- Никакие другие транзакции не могут изменять данные, которые были прочитаны текущей транзакцией, до текущей транзакция завершена.
- Другие транзакции не могут вставлять новые строки с ключевые значения, которые попадают в диапазон ключей, считываемых любыми в текущей транзакции до текущей транзакции завершается.
Это отличное сообщение в блоге, в котором объясняется, как использовать транзакции с инфраструктурой Entity Framework: Примеры области транзакций Entity Framework
UPDATE
В Entity Framework 6 по умолчанию IsolationLevel изменен на READ_COMMITTED_SNAPSHOT для баз данных, созданных с использованием Code First, что потенциально позволяет увеличить масштабируемость и уменьшить количество тупиков. Посмотрите будущую спецификацию EF 6 на codeplex