I can reproduce it in v4. (SQL Server, doesn't matter, filter is added is in generic code)
[Test]
public void UpdateClerkWithRestriction()
{
using(DataAccessAdapter adapter = new DataAccessAdapter())
{
var clerk = new ClerkEntity();
// Employee's fields
clerk.Name = "Frans Bouma";
clerk.StartDate = DateTime.Now;
clerk.JobDescription = "Descr 1";
// rest is null.
Assert.IsTrue(adapter.SaveEntity(clerk, true));
var refetchedClerk = new ClerkEntity(clerk.Id);
try
{
Assert.IsTrue(adapter.FetchEntity(refetchedClerk));
// create predicate based on name
var concurrencyFilter = ClerkFields.Name == "Frans Bouma";
// update name, which is in employee.
refetchedClerk.Name = "Frans Bouma Changed";
refetchedClerk.JobDescription = "Descr 2";
// update
Assert.IsTrue(adapter.SaveEntity(refetchedClerk, true, new PredicateExpression(concurrencyFilter)));
}
finally
{
// delete it
Assert.IsTrue(adapter.DeleteEntity(refetchedClerk));
}
}
}
but... I can also reproduce the same issue on v3.5. Queries are the same. The test above crashes (in v4 as well) with: (from v3.5 tests)
Test 'Unittests.TestLibrary.SqlServerTests.Adapter.InheritanceOneUnitTests.UpdateClerkWithRestriction' failed: SD.LLBLGen.Pro.ORMSupportClasses.ORMConcurrencyException : During a save action an entity's update action failed. The entity which failed is enclosed.
C:\Myprojects\VS.NET Projects\LLBLGen Pro v3.5\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs(1401,0): at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.PersistQueue(List`1 queueToPersist, Boolean insertActions, Int32& totalAmountSaved)
C:\Myprojects\VS.NET Projects\LLBLGen Pro v3.5\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs(1271,0): at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.SaveEntity(IEntity2 entityToSave, Boolean refetchAfterSave, IPredicateExpression updateRestriction, Boolean recurse)
C:\Myprojects\VS.NET Projects\LLBLGen Pro v3.5\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs(1146,0): at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.SaveEntity(IEntity2 entityToSave, Boolean refetchAfterSave, IPredicateExpression updateRestriction)
InheritanceOneTests.cs(74,0): at Unittests.TestLibrary.SqlServerTests.Adapter.InheritanceOneUnitTests.UpdateClerkWithRestriction()
Queries:
q1:
UPDATE [InheritanceOne].[dbo].[Employee]
SET [Name] = 'Frans Bouma Changed' /* @p1 */
FROM ( [InheritanceOne].[dbo].[Employee]
INNER JOIN [InheritanceOne].[dbo].[Clerk]
ON [InheritanceOne].[dbo].[Employee].[EmployeeID] = [InheritanceOne].[dbo].[Clerk].[ClerkID])
WHERE (([InheritanceOne].[dbo].[Employee].[EmployeeID] = 106454 /* @p2 */)
AND (([InheritanceOne].[dbo].[Employee].[Name] = 'Frans Bouma' /* @p3 */)))
q2:
UPDATE [InheritanceOne].[dbo].[Clerk]
SET [JobDescription] = 'Descr 2' /* @p4 */
FROM ( [InheritanceOne].[dbo].[Employee]
INNER JOIN [InheritanceOne].[dbo].[Clerk]
ON [InheritanceOne].[dbo].[Employee].[EmployeeID] = [InheritanceOne].[dbo].[Clerk].[ClerkID])
WHERE (([InheritanceOne].[dbo].[Clerk].[ClerkID] = 106454 /* @p5 */)
AND (([InheritanceOne].[dbo].[Employee].[Name] = 'Frans Bouma' /* @p6 */)))
so it's important which build of v3.5 you're using (likely an old one) and why it does work in your case but not here.
I'm not saying it should produce these queries however, I'm first trying to get the same repro case as you're working with .