Skip to content

Commit cabe60c

Browse files
Copilotsven-n
andcommitted
Fix Mapster TypeInitializationException: ignore IElement-typed members in MapsterConfigurator
Co-authored-by: sven-n <5238610+sven-n@users.noreply.github.com> Agent-Logs-Url: https://github.com/MUnique/OpenMU/sessions/f52ad4aa-9751-4aca-8632-70f3363c04c7
1 parent 64e7860 commit cabe60c

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

src/Persistence/EntityFramework/Model/MapsterConfigurator.Generated.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
namespace MUnique.OpenMU.Persistence.EntityFramework.Model;
1414

15+
using MUnique.OpenMU.AttributeSystem;
1516
using MUnique.OpenMU.Persistence;
1617
using Mapster;
1718

@@ -34,6 +35,15 @@ public static void EnsureConfigured()
3435

3536
Mapster.TypeAdapterConfig.GlobalSettings.Default.PreserveReference(true);
3637
Mapster.TypeAdapterConfig.GlobalSettings.Default.IgnoreMember((member, side) => member.Name.StartsWith("Raw"));
38+
Mapster.TypeAdapterConfig.GlobalSettings.Default.IgnoreMember(
39+
(member, side) =>
40+
{
41+
static bool ContainsIElement(Type t) =>
42+
typeof(IElement).IsAssignableFrom(t)
43+
|| (t.IsArray && t.GetElementType() is { } et && ContainsIElement(et))
44+
|| (t.IsGenericType && t.GetGenericArguments().Any(ContainsIElement));
45+
return ContainsIElement(member.Type);
46+
});
3747

3848
Mapster.TypeAdapterConfig.GlobalSettings.NewConfig<MUnique.OpenMU.DataModel.Statistics.MiniGameRankingEntry, MUnique.OpenMU.DataModel.Statistics.MiniGameRankingEntry>()
3949
.Include<MiniGameRankingEntry, BasicModel.MiniGameRankingEntry>();

src/Persistence/SourceGenerator/EfCoreModelGenerator.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ private string GenerateMapsterConfigurator()
193193
194194
namespace MUnique.OpenMU.Persistence.EntityFramework.Model;
195195
196+
using MUnique.OpenMU.AttributeSystem;
196197
using MUnique.OpenMU.Persistence;
197198
using Mapster;
198199
@@ -215,6 +216,15 @@ public static void EnsureConfigured()
215216
216217
Mapster.TypeAdapterConfig.GlobalSettings.Default.PreserveReference(true);
217218
Mapster.TypeAdapterConfig.GlobalSettings.Default.IgnoreMember((member, side) => member.Name.StartsWith(""Raw""));
219+
Mapster.TypeAdapterConfig.GlobalSettings.Default.IgnoreMember(
220+
(member, side) =>
221+
{{
222+
static bool ContainsIElement(Type t) =>
223+
typeof(IElement).IsAssignableFrom(t)
224+
|| (t.IsArray && t.GetElementType() is {{ }} et && ContainsIElement(et))
225+
|| (t.IsGenericType && t.GetGenericArguments().Any(ContainsIElement));
226+
return ContainsIElement(member.Type);
227+
}});
218228
219229
{configs}
220230
isConfigured = true;

0 commit comments

Comments
 (0)