Thank you for contacting Syncfusion support.
We have prepared the sample to prevent the double-booking appointments which can be download from the below location. In the sample, at initial load 1 appointment will be rendered from 10-11 AM at November 18, 2016 and if a user try to create another appointment in the same range (10-11 AM at November 18, 2016) it will be prevented.
<Code>
<ej-schedule id="Schedule1" width="100%" before-appointment-create="OnBeforeAppointmentCreate" height="525px" current-date="new DateTime(2016, 11, 18)">
<e-resources>
<e-resource field="OwnerId" title="Owner" name="Owners" allow-multiple="true">
<e-resource-settings datasource="ViewBag.Owner" text="Text" id="Id" color="Color">
</e-resource-settings>
</e-resource>
</e-resources>
<e-group resources="ViewBag.Group"></e-group>
<e-appointment-settings apply-time-offset="false" id="Id" subject='"Subject"' start-time='"StartTime"' end-time='"EndTime"' all-day='"AllDay"' recurrence='"Recurrence"' recurrence-rule='"RecurrenceRule"' resource-fields='"OwnerId"'>
<e-datamanager id="Data" json="ViewBag.dataSource"></e-datamanager>
</e-appointment-settings>
</ej-schedule>
<script>
function OnBeforeAppointmentCreate(args) {
var schObj = $("#Schedule1").ejSchedule('instance');
if (ej.isNullOrUndefined(args.appointment[0]))
obj = args.appointment;
else
obj = args.appointment[0];
var predicate = ej.Predicate(schObj._appointmentSettings["startTime"], ej.FilterOperators.lessThanOrEqual, new Date(obj.StartTime)).and(schObj._appointmentSettings["endTime"], ej.FilterOperators.greaterThanOrEqual, new Date(new Date(obj.EndTime)));
var newAppList = new ej.DataManager(schObj._processed).executeLocal(new ej.Query().where(predicate));
if (newAppList.length > 0)
args.cancel = true;
}
</script>
</Code>
Note: Above code will prevent the double booking occurring only at the same range.
Regards,
Karthigeyan