I have code that is looping through records which I grab from the database with a direct fetch, then it migrates these to Umbraco Content using the ContentService. They have relationships to other content using both a multinode treepicker and a content picker. I save off all relationship data (Name and Id) to dictionaries before the for loop in order to avoid any unnecessary searches within a loop. I check ahead of time and I have 310 records that should be migrated, but I keep getting an error saying that there was a deadlock and I get duplicates in the saved content. I've run the same code at times and gotten different results, every once in a great while it actually works fine, but usually I just end up with different numbers of duplicates. Additionally, after I do get the exception returned to me, the process keeps running, as I can see more items getting created. It seems like there could, internally, be a retry that is happening when it fails to save properly. Maybe.
The code I'm using looks like this:
foreach (var physician in existingPhysicians)
{
int locationId = -1;
int specialty1Id = -1;
int specialty2Id = -1;
if (!string.IsNullOrWhiteSpace(physician.LocationName))
{
locationDictionary.TryGetValue(physician.LocationName, out locationId);
}
if (!string.IsNullOrWhiteSpace(physician.Specialty1))
{
specialtyDictionary.TryGetValue(physician.Specialty1, out specialty1Id);
}
if (!string.IsNullOrWhiteSpace(physician.Specialty2))
{
specialtyDictionary.TryGetValue(physician.Specialty2, out specialty2Id);
}
var specialtyIds = string.Join(",", new List<int?>() { specialty1Id > 0 ? (int?)specialty1Id : null, specialty2Id > 0 ? (int?)specialty2Id : null }
.Where(i => i.HasValue).ToArray());
var physicianContent = cs.CreateContent(physicianName, physicianNode, "physician");
/* Set a bunch of properties */
physicianContent.SetValue("specialty1", specialtyIds);
physicianContent.SetValue("location", locationId > 0 ? locationId.ToString() : "");
var attempt = cs.SaveAndPublishWithStatus(physicianContent);
if(!attempt.Success)
{
throw attempt.Exception ?? new Exception(string.Join(",", attempt.Result.InvalidProperties.Select(p => p.Key)));
}
}
By the way, this is the error I'm getting:
Transaction (Process ID 54) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
SaveAndPublishWithStatus Deadlock And Duplicates
I have code that is looping through records which I grab from the database with a direct fetch, then it migrates these to Umbraco Content using the ContentService. They have relationships to other content using both a multinode treepicker and a content picker. I save off all relationship data (Name and Id) to dictionaries before the for loop in order to avoid any unnecessary searches within a loop. I check ahead of time and I have 310 records that should be migrated, but I keep getting an error saying that there was a deadlock and I get duplicates in the saved content. I've run the same code at times and gotten different results, every once in a great while it actually works fine, but usually I just end up with different numbers of duplicates. Additionally, after I do get the exception returned to me, the process keeps running, as I can see more items getting created. It seems like there could, internally, be a retry that is happening when it fails to save properly. Maybe.
The code I'm using looks like this:
By the way, this is the error I'm getting: Transaction (Process ID 54) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Obviously, the Process ID changes.
Is there any way at all to get any sort of input on this?
Has anyone else seen similar behavior using the ContentService? Is there something I might be doing wrong here?
is working on a reply...