Замапить 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;
}
}