Как использовать GUID V7 в EF Core?C#

Место общения программистов C#
Ответить
Anonymous
 Как использовать GUID V7 в EF Core?

Сообщение Anonymous »

Я обновил .NET 9 и EF Core 9.
Я хочу заменить все guid.newguid () в идентификаторе моей базы данных с столбцами с V7, который поставляется с .net 9: guid.createversion7 () .
EF Core, похоже, не обеспечивает неотъемлемый способ сделать это, Итак, я реализовал пользовательское решение. < /p>
Однако я не могу найти способ сделать это на EF Core Out из коробки. < /p>
Решение, которое я придумал, работает, но я не уверен, что это лучший (или даже хороший).
Это то, что я сделал:

Создайте генератор пользовательского генератора для Guids V7. > Зарегистрируйте это соглашение во всем мире с помощью EF Core < /li>
< /ol>
Шаг 1: < /p>

Код: Выделить всё

public class GuidV7ValueGenerator : ValueGenerator
{
public override bool GeneratesTemporaryValues => false;
public override Guid Next(EntityEntry _) => Guid.CreateVersion7();
}
< /code>
Шаг 2: < /p>
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());
}
}
}
}
}
< /code>
Шаг 3: < /p>
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());
}
}
Это работает.>

Подробнее здесь: https://stackoverflow.com/questions/793 ... in-ef-core
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»