Hi!
We're experiencing strange behavior with concurrency control. We have an IConcurrencyPredicateFactory implementing class which is, through dependency injection, injected into the ConcurrencyPredicateFactoryToUse property of all our entities. The entities all implement an interface which provides the factory with the order of the field named "LastModified", which almost all of them have, and the factory generates a predicate, regardless of wether the operation is a save or a delete, that tests equality of this field with the value originally read from the database:
result.Add(new FieldCompareValuePredicate(entity.Fields[fieldOrder], null, ComparisonOperator.Equal, entity.Fields[fieldOrder].DbValue));
The field type is DateTime. This line of code is in no switch-case statement, it is executed regardless of the ConcurrencyPredicateType value passed to the method.
When saving entities, this works great. However, upon deleting an entity that was altered elsewhere, the control does nothing. We debugged it, and the CreatePredicate() method of the factory is called and it returns the right predicate. We carefully checked the field's DbValue and the actual value in the database, and they are different. However, the delete gets carried out none the less. The generated SQL contains only the ID condition, no mention of any LAST_MODIFIED checking.
We're using LLBLGen Pro v.2.5 Final (December 5th, 2007) on an Oracle 11g DB over the MS provider for Oracle. Adapter code.