Just in case try to load data into csv file and see what values are populating for Dealer_ID__c
Upsert uses the sObject record's primary key (or the external ID, if specified) to determine whether it should create a new object record or update an existing one:
- If the key is not matched, then a new object record is created.
- If the key is matched once, then the existing object record is updated.
- If the key is matched multiple times, then an error is generated and the object record is neither inserted or updated.
So if suppose there is already a record present in Salesforce with External ID and in source there are two records to be upserted with same external ID, so for 1st record, condition 2 is fulfilled and it is upserted but when again for updating the second record, it becomes condition 3 so the records are not upserted and it throws error