Безопасно ли смешивать необработанные запросы с использованием cfquery
и ORM-операций в одном и том же теге cftransaction
?Смешать необработанные запросы и операции ORM в пределах одного и того же cftransaction
<cftransaction>
<cfquery datasource="test">...</cfqueyr> <!--- A --->
<cfset var e = entityLoadByPK('SomeEntity', someId)> <!--- B --->
<cfset e.setSomeProperty('test')> <!--- C --->
<cfquery datasource="test">...</cfquery> <!--- D --->
</cftransaction>
Имея взглянуть на SQL Profiler, то кажется, что запросы не будут выполняться последовательно, они появляются в профилировщика в следующем порядке: A, B, D, C. Из того, что я понимаю, , это может произойти, потому что сеанс спящего режима будет сброшен только тогда, когда он достигнет закрытия cftransaction
, это правильно?
Я заметил, что из-за другого вопроса , который я задам в другом вопросе. Но в основном, я должен отключить триггеры в конкретной таблице перед запуском ORM-инструкции, иначе это приведет к StaleStateException
.
При наличии операции ORM между DISABLE TRIGGER
и ENABLE TRIGGER
заявления в том же cftransaction
, это не решает проблему, потому что ENABLE TRIGGER
побежал до того ОРМ запроса. Однако, при использовании следующих, она работает:
<cfquery datasource="test">
DISABLE TRIGGER ALL ON Test;
</cfquery>
<cftransaction>
<!--- ORM CODE --->
<!--- Other cfquery --->
</cftransaction>
<cfquery datasource="test">
ENABLE TRIGGER ALL ON Test;
</cfquery>
Я также попытался использовать ormFlush()
сразу после заявления ORM, но это не сработало. Есть ли способ смешать необработанные запросы и операторы ORM в одном и том же cftransaction
и иметь оператор для выполнения последовательно? Возможно, я полностью недопонимаю этот вопрос, но сейчас я очень озадачен.
Я снова посмотрел бы с 'ormFlush()'. Я считаю, что это работает, и я использовал его раньше, без проблем. – Henry
@ Хенри, мне придется подождать до понедельника, чтобы дважды проверить. Если у вас установлен CF, можете ли вы подтвердить свою инструкцию, вставив в таблицу 3 строки (без orm, orm, без orm) и проверьте результат? Благодаря! – plalx