Skip to content

Commit

Permalink
Make it work on MySQL Again
Browse files Browse the repository at this point in the history
  • Loading branch information
linkdotnet committed Nov 10, 2024
1 parent e6c9700 commit eb3c0b5
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 7 deletions.
10 changes: 5 additions & 5 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
</ItemGroup>
<ItemGroup Label="Infrastructure">
<PackageVersion Include="Azure.Storage.Blobs" Version="12.22.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.0-rc.2.24474.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0-rc.2.24474.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0-rc.2.24474.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.10" />
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="9.0.0-rc.2.24474.3" />
<PackageVersion Include="MongoDB.Driver" Version="2.30.0" />
<PackageVersion Include="MySql.EntityFrameworkCore" Version="9.0.0-preview" />
<PackageVersion Include="MySql.EntityFrameworkCore" Version="8.0.8" />
<PackageVersion Include="RavenDB.Client" Version="6.2.1" />
</ItemGroup>
<ItemGroup Label="Web">
Expand Down Expand Up @@ -41,4 +41,4 @@
<PackageVersion Include="xunit.v3" Version="0.5.0-pre.27" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.0-pre.42" />
</ItemGroup>
</Project>
</Project>
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
using System;
using System.Text.Json;
using LinkDotNet.Blog.Domain;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using MySql.EntityFrameworkCore.Extensions;

namespace LinkDotNet.Blog.Infrastructure.Persistence.Sql.Mapping;

internal sealed class BlogPostConfiguration : IEntityTypeConfiguration<BlogPost>
{
private readonly DatabaseFacade databaseFacade;

public BlogPostConfiguration(DatabaseFacade databaseFacade)
=> this.databaseFacade = databaseFacade;

public void Configure(EntityTypeBuilder<BlogPost> builder)
{
builder.HasKey(c => c.Id);
Expand All @@ -19,7 +28,14 @@ public void Configure(EntityTypeBuilder<BlogPost> builder)
builder.Property(x => x.ShortDescription).IsRequired();
builder.Property(x => x.Likes).IsRequired();
builder.Property(x => x.IsPublished).IsRequired();
builder.Property(x => x.Tags).HasMaxLength(2096);

var tags = builder.Property(x => x.Tags).HasMaxLength(2048);

if (databaseFacade.IsMySql())
{
// MySQL EF Driver does not support arrays out of the box so we have to json serialize and deserialize them
tags.HasConversion<JsonArrayConverter>();
}

builder.HasIndex(x => new { x.IsPublished, x.UpdatedDate })
.HasDatabaseName("IX_BlogPosts_IsPublished_UpdatedDate")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;

namespace LinkDotNet.Blog.Infrastructure.Persistence.Sql.Mapping;

internal sealed class JsonArrayConverter : ValueConverter<IList<string>, string>
{
public JsonArrayConverter() : base(
v => JsonSerializer.Serialize(v, JsonSerializerOptions.Default),
v => JsonSerializer.Deserialize<string[]>(v, JsonSerializerOptions.Default) ??
Array.Empty<string>())
{
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
using LinkDotNet.Blog.Domain;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using MySql.EntityFrameworkCore.Extensions;

namespace LinkDotNet.Blog.Infrastructure.Persistence.Sql.Mapping;

internal sealed class SimilarBlogPostConfiguration : IEntityTypeConfiguration<SimilarBlogPost>
{
private readonly DatabaseFacade database;

public SimilarBlogPostConfiguration(DatabaseFacade database)
=> this.database = database;

public void Configure(EntityTypeBuilder<SimilarBlogPost> builder)
{
builder.HasKey(b => b.Id);
builder.Property(b => b.Id)
.IsUnicode(false)
.ValueGeneratedOnAdd();
builder.Property(b => b.SimilarBlogPostIds).HasMaxLength(450 * 3).IsRequired();

var similarBlogPosts = builder
.Property(b => b.SimilarBlogPostIds)
.HasMaxLength(450 * 3)
.IsRequired();

if (database.IsMySql())
{
similarBlogPosts.HasConversion<JsonArrayConverter>();
}
}
}

0 comments on commit eb3c0b5

Please sign in to comment.