Skip to content

Commit b6079a7

Browse files
manishtiwari25linkdotnet
authored andcommitted
Added Support for MySql
1 parent 3b50c4e commit b6079a7

File tree

6 files changed

+36
-5
lines changed

6 files changed

+36
-5
lines changed

Readme.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,8 @@ Note the ConnectionString format of SQL Server needs to be consistent:
231231
```
232232
"ConnectionString": "Data Source=sql;Initial Catalog=master;User ID=sa;Password=<YOURPASSWORD>;TrustServerCertificate=True;MultiSubnetFailover=True"
233233
```
234+
For MySql Change following
235+
```
236+
"PersistenceProvider": "MySql"
237+
"ConnectionString": "Server=YOURSERVER;User ID=YOURUSERID;Password=YOURPASSWORD;Database=YOURDATABAS"
238+
```

src/LinkDotNet.Blog.Infrastructure/LinkDotNet.Blog.Infrastructure.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
<ItemGroup>
1010
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
11+
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="7.0.0" />
1112
<PackageReference Include="RavenDB.Client" Version="5.4.103" />
1213
</ItemGroup>
1314

src/LinkDotNet.Blog.Infrastructure/Persistence/PersistenceProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using LinkDotNet.Blog.Domain;
1+
using LinkDotNet.Blog.Domain;
22

33
namespace LinkDotNet.Blog.Infrastructure.Persistence;
44

@@ -8,6 +8,7 @@ public class PersistenceProvider : Enumeration<PersistenceProvider>
88
public static readonly PersistenceProvider Sqlite = new(nameof(Sqlite));
99
public static readonly PersistenceProvider RavenDb = new(nameof(RavenDb));
1010
public static readonly PersistenceProvider InMemory = new(nameof(InMemory));
11+
public static readonly PersistenceProvider MySql = new(nameof(MySql));
1112

1213
protected PersistenceProvider(string key)
1314
: base(key)

src/LinkDotNet.Blog.Web/RegistrationExtensions/SqlRegistrationExtensions.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using LinkDotNet.Blog.Infrastructure.Persistence;
1+
using LinkDotNet.Blog.Infrastructure.Persistence;
22
using LinkDotNet.Blog.Infrastructure.Persistence.Sql;
33
using Microsoft.EntityFrameworkCore;
44
using Microsoft.Extensions.DependencyInjection;
@@ -38,6 +38,24 @@ public static void UseSqliteAsStorageProvider(this IServiceCollection services)
3838
builder.UseSqlite(connectionString)
3939
#if DEBUG
4040
.EnableDetailedErrors()
41+
#endif
42+
;
43+
});
44+
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
45+
}
46+
47+
public static void UseMySqlAsStorageProvider(this IServiceCollection services)
48+
{
49+
services.AssertNotAlreadyRegistered(typeof(IRepository<>));
50+
51+
services.AddPooledDbContextFactory<BlogDbContext>(
52+
(s, builder) =>
53+
{
54+
var configuration = s.GetRequiredService<AppConfiguration>();
55+
var connectionString = configuration.ConnectionString;
56+
builder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString))
57+
#if DEBUG
58+
.EnableDetailedErrors()
4159
#endif
4260
;
4361
});

src/LinkDotNet.Blog.Web/RegistrationExtensions/StorageProviderExtensions.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using LinkDotNet.Blog.Domain;
1+
using LinkDotNet.Blog.Domain;
22
using LinkDotNet.Blog.Infrastructure.Persistence;
33
using Microsoft.Extensions.Caching.Memory;
44
using Microsoft.Extensions.Configuration;
@@ -34,6 +34,11 @@ public static void AddStorageProvider(this IServiceCollection services, IConfigu
3434
services.UseSqlAsStorageProvider();
3535
services.RegisterCachedRepository<Infrastructure.Persistence.Sql.Repository<BlogPost>>();
3636
}
37+
else if (persistenceProvider == PersistenceProvider.MySql)
38+
{
39+
services.UseMySqlAsStorageProvider();
40+
services.RegisterCachedRepository<Infrastructure.Persistence.Sql.Repository<BlogPost>>();
41+
}
3742
}
3843

3944
private static void RegisterCachedRepository<TRepo>(this IServiceCollection services)

tests/LinkDotNet.Blog.UnitTests/StorageProviderRegistrationExtensionsTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using LinkDotNet.Blog.Web.RegistrationExtensions;
44
using Microsoft.Extensions.DependencyInjection;
@@ -13,6 +13,7 @@ public class StorageProviderRegistrationExtensionsTests
1313
new object[] { new Action<IServiceCollection>(services => services.UseSqlAsStorageProvider()) },
1414
new object[] { new Action<IServiceCollection>(services => services.UseInMemoryAsStorageProvider()) },
1515
new object[] { new Action<IServiceCollection>(services => services.UseRavenDbAsStorageProvider()) },
16+
new object[] { new Action<IServiceCollection>(services => services.UseMySqlAsStorageProvider()) },
1617
};
1718

1819
[Theory]
@@ -26,4 +27,4 @@ public void GivenAlreadyRegisteredRepository_WhenTryingToAddAnotherStorage_ThenE
2627

2728
actualAct.Should().Throw<NotSupportedException>();
2829
}
29-
}
30+
}

0 commit comments

Comments
 (0)