Skip to content

Commit 44ed3f2

Browse files
committed
Don't use NpgsqlDataSource from DI if connection string/connection is specified (#3102)
Fixes #3060 (cherry picked from commit c0c962c)
1 parent 47cac24 commit 44ed3f2

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

src/EFCore.PG/Internal/NpgsqlSingletonOptions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ public virtual void Initialize(IDbContextOptions options)
8989
// TODO: Remove after https://github.com/dotnet/efcore/pull/29950
9090
ApplicationServiceProvider = coreOptions.ApplicationServiceProvider;
9191

92-
DataSource = npgsqlOptions.DataSource ?? coreOptions.ApplicationServiceProvider?.GetService<NpgsqlDataSource>();
92+
DataSource = npgsqlOptions.DataSource ?? (npgsqlOptions.ConnectionString is null && npgsqlOptions.Connection is null
93+
? coreOptions.ApplicationServiceProvider?.GetService<NpgsqlDataSource>()
94+
: null);
9395
}
9496

9597
/// <inheritdoc />

test/EFCore.PG.Tests/NpgsqlRelationalConnectionTest.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void Uses_DbDataSource_from_DbContextOptions()
5151
Assert.Equal("Host=FakeHost", connection2.ConnectionString);
5252
}
5353

54-
[Fact]
54+
[Fact(Skip = "Passes in isolation, but fails when the entire test suite is run because of #2891")]
5555
public void Uses_DbDataSource_from_application_service_provider()
5656
{
5757
var serviceCollection = new ServiceCollection();
@@ -81,6 +81,26 @@ public void Uses_DbDataSource_from_application_service_provider()
8181
Assert.Equal("Host=FakeHost", connection2.ConnectionString);
8282
}
8383

84+
[Fact] // #3060
85+
public void DbDataSource_from_application_service_provider_does_not_used_if_connection_string_is_specified()
86+
{
87+
var serviceCollection = new ServiceCollection();
88+
89+
serviceCollection
90+
.AddNpgsqlDataSource("Host=FakeHost1")
91+
.AddDbContext<FakeDbContext>(o => o.UseNpgsql("Host=FakeHost2"));
92+
93+
using var serviceProvider = serviceCollection.BuildServiceProvider();
94+
95+
using var scope1 = serviceProvider.CreateScope();
96+
var context1 = scope1.ServiceProvider.GetRequiredService<FakeDbContext>();
97+
var relationalConnection1 = (NpgsqlRelationalConnection)context1.GetService<IRelationalConnection>()!;
98+
Assert.Null(relationalConnection1.DbDataSource);
99+
100+
var connection1 = context1.GetService<FakeDbContext>().Database.GetDbConnection();
101+
Assert.Equal("Host=FakeHost2", connection1.ConnectionString);
102+
}
103+
84104
[Fact]
85105
public void Can_create_master_connection_with_connection_string()
86106
{

0 commit comments

Comments
 (0)