Замапить BigInt на модель с INT'ом

В общем, есть какая-то БД и в ней есть поля BigInt. Эти поля ну никогда не превысят порог обычного INT.

Есть модель, где эти поля имеют значение INT.

Так вот, я могу как-нибудь выполнить мапинг?

Пробовал вот такую штуку сделать

  var converter = new ValueConverter<int, long>(
            v => v,
            v => (int)v);

И во fluent API вызвать:

HasConversion(converter)

Но ловлю:

System.InvalidCastException : Unable to cast object of type 'System.Int32' to type 'System.Int64'.

Если местами поменять, то такая ошибка:

System.InvalidOperationException : Converter for model type 'long' cannot be used for 'DocumentRequest.Id' because its type is 'int'.

=> первый вариант верный.


Ответы (1 шт):

Автор решения: Yaroslav

Можно попробовать как то так:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{           
    modelBuilder
        .Properties<User, int>()
        .Configure(x => x.HasColumnType("bigint"))
        .ValueGeneratedNever();
}


public static class Exp
{
    public static PropertyBuilder Properties<TEntity, TProperty>(this ModelBuilder modelBuilder)
        where TEntity : class
        where TProperty : struct
    {
        var propertyBuilders = modelBuilder.Model
            .GetEntityTypes()
            .SelectMany(t => t.GetProperties())
            .Where(p => p.ClrType == typeof(TProperty) || p.ClrType == typeof(TProperty?))
            .Select(p => modelBuilder.Entity(p.DeclaringEntityType.ClrType).Property(p.Name));

        foreach (var pb in propertyBuilders)
        {
            return pb;
        }
        return default;
    }

    public static PropertyBuilder Configure(
        this PropertyBuilder propertyBuilders, 
        Action<PropertyBuilder> action)
    {
        action(propertyBuilders);

        return propertyBuilders;
    }
}
→ Ссылка