From ab48d83d32c014465b6f19b25bbb6f9dbe3d924d Mon Sep 17 00:00:00 2001 From: Mathias Fussenegger Date: Tue, 18 Jan 2022 17:02:48 +0100 Subject: [PATCH] Add npgsql + ef test case for duplicate key conflicts on insert --- tests/client_tests/stock_npgsql/Program.cs | 42 ++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/tests/client_tests/stock_npgsql/Program.cs b/tests/client_tests/stock_npgsql/Program.cs index e2331848..2ca7d05c 100644 --- a/tests/client_tests/stock_npgsql/Program.cs +++ b/tests/client_tests/stock_npgsql/Program.cs @@ -77,9 +77,45 @@ static async Task Main(string[] args) using (var conn = new NpgsqlConnection(connString)) { conn.Open(); - await TestBasics(conn); - await TestUnnestAsync(conn); - await TestInsertUsingEntityFramework(conn); + // await TestBasics(conn); + // await TestUnnestAsync(conn); + // await TestInsertUsingEntityFramework(conn); + await TestInsertWithDuplicateKeyConflict(conn); + } + } + + private static async Task TestInsertWithDuplicateKeyConflict(NpgsqlConnection conn) + { + using (var cmd = new NpgsqlCommand("drop table if exists test.test", conn)) + { + await cmd.ExecuteNonQueryAsync(); + } + string createTable = @" + CREATE TABLE test.test ( + id text default gen_random_text_uuid() primary key, + datetime timestamp with time zone + )"; + using (var cmd = new NpgsqlCommand(createTable, conn)) + { + await cmd.ExecuteNonQueryAsync(); + } + CrateContext.ConnectionString = conn.ConnectionString; + var entries = new List(); + using (CrateContext context = new()) { + for (int i = 0; i < 4; i++) + { + var entry = new TestEntity(); + context.Test.Add(entry); + entries.Add(entry); + } + await context.SaveChangesAsync(); + } + + using (CrateContext context = new()) { + foreach (var entry in entries) { + context.Test.Add(entry); + } + await context.SaveChangesAsync(); } }