Wie verwende ich Guid v7 in EF Core?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie verwende ich Guid v7 in EF Core?

Post by Guest »

Ich habe auf .NET 9 und EF Core 9 aktualisiert.
Ich möchte alle Guid.NewGuid() in den ID-Spalten meiner Datenbank durch ersetzen die Version 7, die mit .NET 9 ausgeliefert wurde: Guid.CreateVersion7().
EF Core scheint hierfür keine sofort einsatzbereite Möglichkeit zu bieten. Also habe ich eine benutzerdefinierte Lösung implementiert.
Allerdings kann ich anscheinend keine Möglichkeit finden, dies sofort auf EF Core zu tun.
Die Lösung, die ich gefunden habe, funktioniert, aber ich bin es Ich bin mir nicht sicher, ob es das beste (oder sogar ein gutes) ist.
Das habe ich gemacht:
  • Erstellen Sie einen benutzerdefinierten Wertgenerator für v7-Guids.
  • Erstellen Sie eine benutzerdefinierte Konvention, die verwendet den benutzerdefinierten Generator
  • Registrieren Sie diese Konvention global bei EF Core
Schritt 1:

Code: Select all

public class GuidV7ValueGenerator : ValueGenerator
{
public override bool GeneratesTemporaryValues => false;
public override Guid Next(EntityEntry _) => Guid.CreateVersion7();
}
Schritt 2:

Code: Select all

public class GuidV7Convention : IModelFinalizingConvention
{
public void ProcessModelFinalizing(IConventionModelBuilder modelBuilder, IConventionContext _)
{
foreach (var entityType in modelBuilder.Metadata.GetEntityTypes())
{
foreach (var property in entityType.GetProperties())
{
if (property.ClrType == typeof(Guid) && property.ValueGenerated == ValueGenerated.OnAdd)
{
property.SetValueGeneratorFactory((_, _) => new GuidV7ValueGenerator());
}
}
}
}
}
Schritt 3:

Code: Select all

public class MyDbContext(...) : DbContext
{
public DbSet Foos { get; set; } = null!;

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// ...
}

protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
base.ConfigureConventions(configurationBuilder);
configurationBuilder.Conventions.Add(_ => new GuidV7Convention());
}
}
Das funktioniert.
Alle meine Entitäten haben jetzt v7-Guids, aber ist das der richtige Weg?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post