Skip to content

Commit 8a5c4d8

Browse files
authored
Generate guid's for primary key client side (#257)
* Generate guid's for primary key client side
1 parent f97148f commit 8a5c4d8

4 files changed

Lines changed: 92 additions & 5 deletions

File tree

src/EFCore.Jet/ValueGeneration/Internal/JetValueGeneratorSelector.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public JetValueGeneratorSelector(
4040

4141
protected override ValueGenerator? FindForType(IProperty property, ITypeBase typeBase, Type clrType)
4242
=> property.ClrType.UnwrapNullableType() == typeof(Guid)
43-
? property.ValueGenerated == ValueGenerated.Never || property.GetDefaultValueSql() != null
43+
? property.ValueGenerated == ValueGenerated.Never || (property.GetDefaultValueSql() != null && !property.IsPrimaryKey())
4444
? new TemporaryGuidValueGenerator()
4545
: new JetSequentialGuidValueGenerator()
4646
: base.FindForType(property, typeBase, clrType);

test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Deadlock_on_inserts_and_deletes_with_dependents_is_handled_correctly
2+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 1)
3+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 100)
4+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 3)
5+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 4)
26
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_and_updates_are_batched_correctly
7+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: False, clientOrder: False)
8+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: False, clientOrder: True)
9+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: True, clientOrder: False)
10+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: True, clientOrder: True)
311
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: False)
412
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: True)
513
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: True, clientOrder: False)
@@ -2675,6 +2683,41 @@ EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_and_remove_entit
26752683
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_table_splitting_dependent_after_principal
26762684
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_enumerate_entity_set
26772685
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 0)
2686+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 1)
2687+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 2)
2688+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 3)
2689+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 4)
2690+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 7)
2691+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 0)
2692+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 1)
2693+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 2)
2694+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 3)
2695+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 4)
2696+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 7)
2697+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 0)
2698+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 1)
2699+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 2)
2700+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 3)
2701+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 4)
2702+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 7)
2703+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 0)
2704+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 1)
2705+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 2)
2706+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 3)
2707+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 4)
2708+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 7)
2709+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 0)
2710+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 1)
2711+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 2)
2712+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 3)
2713+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 4)
2714+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 7)
2715+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 0)
2716+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 1)
2717+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 2)
2718+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 3)
2719+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 4)
2720+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 7)
26782721
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_non_owner_principal_for_owned
26792722
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_TPT_dependents_with_identity
26802723
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_remove_multiple_byte_array_as_key

test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Deadlock_on_inserts_and_deletes_with_dependents_is_handled_correctly
2+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 1)
3+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 100)
4+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 3)
5+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 4)
26
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_and_updates_are_batched_correctly
7+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: False, clientOrder: False)
8+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: False, clientOrder: True)
9+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: True, clientOrder: False)
10+
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: True, clientOrder: True)
311
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: False)
412
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: True)
513
EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: True, clientOrder: False)
@@ -2747,6 +2755,41 @@ EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_and_remove_entit
27472755
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_table_splitting_dependent_after_principal
27482756
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_enumerate_entity_set
27492757
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 0)
2758+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 1)
2759+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 2)
2760+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 3)
2761+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 4)
2762+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 7)
2763+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 0)
2764+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 1)
2765+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 2)
2766+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 3)
2767+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 4)
2768+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 7)
2769+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 0)
2770+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 1)
2771+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 2)
2772+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 3)
2773+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 4)
2774+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 7)
2775+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 0)
2776+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 1)
2777+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 2)
2778+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 3)
2779+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 4)
2780+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 7)
2781+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 0)
2782+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 1)
2783+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 2)
2784+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 3)
2785+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 4)
2786+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 7)
2787+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 0)
2788+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 1)
2789+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 2)
2790+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 3)
2791+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 4)
2792+
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 7)
27502793
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_non_owner_principal_for_owned
27512794
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_TPT_dependents_with_identity
27522795
EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_remove_multiple_byte_array_as_key

test/EFCore.Jet.FunctionalTests/JetEndToEndTest.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -989,10 +989,11 @@ public async Task Can_insert_entities_with_generated_PKs(int studentCount, int c
989989
Assert.Equal(course.Id, e.CourseId);
990990
Assert.Equal(context.Entry(student).Property(e => e.Id).CurrentValue, entry.Property(e => e.StudentId).CurrentValue);
991991
Assert.Equal(context.Entry(course).Property(e => e.Id).CurrentValue, entry.Property(e => e.CourseId).CurrentValue);
992-
Assert.True(entry.Property(e => e.StudentId).IsTemporary);
993-
Assert.True(entry.Property(e => e.CourseId).IsTemporary);
994-
Assert.True(context.Entry(student).Property(e => e.Id).IsTemporary);
995-
Assert.True(context.Entry(course).Property(e => e.Id).IsTemporary);
992+
//We generate Guid's client side
993+
Assert.False(entry.Property(e => e.StudentId).IsTemporary);
994+
Assert.False(entry.Property(e => e.CourseId).IsTemporary);
995+
Assert.False(context.Entry(student).Property(e => e.Id).IsTemporary);
996+
Assert.False(context.Entry(course).Property(e => e.Id).IsTemporary);
996997
});
997998

998999
context.SaveChanges();

0 commit comments

Comments
 (0)