Let's review what a concurrency violation means. Every row that gets modified or deleted by DevForce has a CurrentVersion and an OriginalVersion of that row in the PersistenceManager Cache. When DevForce tells the database to delete a row, the database looks at the CurrentVersion of the ConcurrencyColumn from the PersistenceManager Cache and compares it with the actual value of the ConcurrencyColumn in the database, The two numbers should be the same. If they are not the same, the assumption is made that some other user or process must have changed that value, and a concurrency violation is reported
Let me give an example. I will use the RowVersion column as the ConcurrenctColumn and the database will increment that number by 1 for every change. When I do a GetEntities on Employee, assume that RowVersion is 100 for a particular row. If I do a Delete on that row, the RowVersion will be equal to 100 for both the OriginalVersion and the CurrentVersion. The database will allow the Delete as long as the RowVersion in the database is still equal to 100.
Now, let's take the same example, but after I do the GetEntities of Employee, some other user modifies the row I want to delete. This will change RowVersion from 100 to 101. Then when I try the Delete, my proposed value of 100 for RowVersion will not match the 101 value in the database,
You should now see that we need more information from your recent code. Report the value of the ConcurrencyColumn from both the OriginalVersion and CurrentVersion of the EntityWithErrors. Also, report the value of the ConcurrencyColumn in the database. If you are not sure how to do this, look at the code in the tutorial on Resolving Concurrency Conflicts.