2017-02-23 81 views
0

Я новичок в ColdFusion, и я пытался из ORM (Hibernate, я считаю, что я не знаю вообще)Одновременные запросы базы данных ColdFusion ORM неудачу

Я столкнулся с проблемой при попытке вызова двух CF страницы быстро. Код на двух страницах супер просто:

getAppointments.cfm:

<cfscript> 
    ORMReload(); 
    appointments = serializeJSON(EntityLoad("Appointment")); 
</cfscript> 

<cfoutput>#appointments#</cfoutput> 

getRooms.cfm:

<cfscript> 
    ORMReload(); 
    rooms = serializeJSON(EntityLoad("Room")); 
</cfscript> 

<cfoutput>#rooms#</cfoutput> 

код, который я использую, чтобы вызвать их в JQuery/AJAX:

var appointments; 
var rooms; 

$(document).ready(function() { 
    loadAppointments(); 
    loadRooms(); 
}); 

function loadAppointments() { 
    $.ajax({ 
     type: 'get', 
     url: 'getAppointments.cfm' 
    }).done(function (response) { 
     appointments = JSON.parse(response); 
    }).fail(function (response) { 
     var message = response.status + " - " + response.statusText; 
     alert("Failed to load appointments: " + message); 
    }); 
} 

function loadRooms() { 
    $.ajax({ 
     type: 'get', 
     url: 'getRooms.cfm' 
    }).done(function (jsonString) { 
     rooms = JSON.parse(jsonString); 
    }).fail(function (response) { 
     var message = response.status + " - " + response.statusText; 
     alert("Failed to load rooms: " + message); 
    }) 
} 

Если я установил точку останова для приостановки выполнения до того, как вызывается loadRooms(), все хорошо. Если я позволю коду работать прямо, я получаю ошибку 500, поэтому довольно очевидно, что я сталкиваюсь с проблемой параллелизма с ORM из-за асинхронного вызова AJAX.

Я запускаю CF на IIS (localhost) с базой данных SQL Server.

Ни один из учебников по CF, которые я видел, не охватывает такой сценарий. Я знаю, что могу отложить выполнение внутри JS-функций, но это только маскирует основную проблему.

Может ли кто-нибудь указать мне на решение? Есть ли что-то похожее на блокировку C#, доступную в CF?

ответ

1

Вы подаете ORMReload() с каждым вызовом, который является причиной для перезагрузки всех объектов, ясно ОРМ кэша и т.д.

Пожалуйста, прочтите о ORMReload(), следует использовать только один раз, когда вы вносите изменения в вашей организации ХФ.

+0

Функция EntityLoad требует имя + критерии/идентификатор, пожалуйста, прочитайте больше об этом https://cfdocs.org/entityload – Sana

+0

Спасибо, вынимая ORMReload, решили проблему! Я думал, что это необходимо, потому что все обучающие материалы, на которые я смотрел, включают его в верхней части каждой страницы, использующей ORM. Поэтому мне нужно только включить его, когда страница создает, обновляет или удаляет CFC, но не для чтения? –

Смежные вопросы