Skip to content

Commit 0e558a5

Browse files
authored
Merge pull request #552 from ArnaudB88/bug/551-Connectionstring
Fixes #551 Allows user passwords with accolade
2 parents 23af8b9 + 1b981f6 commit 0e558a5

4 files changed

Lines changed: 43 additions & 3 deletions

File tree

src/EntityFrameworkCore.Generator.Core/CodeGenerator.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,15 @@ private DatabaseModel GetDatabaseModel(IDatabaseModelFactory factory)
365365
_logger.LogInformation("Loading database model ...");
366366

367367
var database = Options.Database;
368+
369+
//do not evaluate connection string resolving (cfr. { or } in password => crash)
370+
var shouldEvaluate = Options.Variables.ShouldEvaluate;
371+
Options.Variables.ShouldEvaluate = false;
372+
368373
var connectionString = ResolveConnectionString(database);
374+
375+
Options.Variables.ShouldEvaluate = shouldEvaluate;
376+
369377
var options = new DatabaseModelFactoryOptions(database.Tables, database.Schemas);
370378

371379
return factory.Create(connectionString, options);

test/EntityFrameworkCore.Generator.Core.Tests/CodeGeneratorTests.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using EntityFrameworkCore.Generator.Options;
1+
using EntityFrameworkCore.Generator.Options;
22
using FluentAssertions;
33
using FluentCommand.SqlServer.Tests;
44
using Microsoft.Extensions.Logging.Abstractions;
@@ -27,6 +27,19 @@ public void Generate()
2727
result.Should().BeTrue();
2828
}
2929

30+
31+
[Fact]
32+
public void Generate_Should_Work_For_Password_With_CurlyBrace()
33+
{
34+
var generatorOptions = new GeneratorOptions();
35+
generatorOptions.Database.ConnectionString = Database.ConnectionString
36+
.Replace("Integrated Security=True", @"User ID=testuser;Password=rglna{adQP123456");//This is the user specified in Script003.Tracker.User.sql
37+
38+
var generator = new CodeGenerator(NullLoggerFactory.Instance);
39+
var result = generator.Generate(generatorOptions);
40+
41+
result.Should().BeTrue();
42+
}
3043
[Fact]
3144
public void GenerateSpatial()
3245
{
@@ -61,4 +74,5 @@ public void GenerateSpatial()
6174

6275
}
6376

64-
}
77+
}
78+

test/EntityFrameworkCore.Generator.Core.Tests/EntityFrameworkCore.Generator.Core.Tests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFramework>net8.0</TargetFramework>
44

@@ -10,6 +10,7 @@
1010
<None Remove="Options\full.yaml" />
1111
<None Remove="Scripts\Script001.Tracker.Schema.sql" />
1212
<None Remove="Scripts\Script002.Tracker.Data.sql" />
13+
<None Remove="Scripts\Script003.Tracker.User.sql" />
1314
</ItemGroup>
1415

1516
<ItemGroup>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
IF NOT EXISTS
2+
(SELECT name
3+
FROM master.sys.sql_logins
4+
WHERE name = 'testuser')
5+
BEGIN
6+
CREATE LOGIN [testuser] WITH PASSWORD = N'rglna{adQP123456';
7+
END
8+
-- check our db
9+
IF NOT EXISTS
10+
(SELECT name
11+
FROM sys.database_principals
12+
WHERE name = 'testuser')
13+
BEGIN
14+
CREATE USER [testuser] FOR LOGIN [testuser] WITH DEFAULT_SCHEMA = dbo
15+
END
16+
exec sp_addrolemember db_datareader, 'testuser'
17+
exec sp_addrolemember db_datawriter, 'testuser'

0 commit comments

Comments
 (0)