すべての10進数プロパティの精度を(18,6)に設定します。 EF6では、これは非常に簡単でした。
modelBuilder.Properties<decimal>().Configure(x => x.HasPrecision(18, 6));
eF Coreでこれに似たものを見つけることができないようです。カスケード削除規則の削除はEF6ほど簡単ではなかったため、次の回避策を見つけました。
EF6:
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
EFコア:
foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
relationship.DeleteBehavior = DeleteBehavior.Restrict;
this を読んだ後、同様のアプローチを試みました。
foreach (var entityType in modelBuilder.Model.GetEntityTypes()
.SelectMany(x => x.GetProperties())
.Where(x => x.ClrType == typeof(decimal)))
{
// what to do here?
}
正しい軌道に乗っていて、どのように続行するか、またはそうでない場合は、すべてのdecimal
プロパティにデータ注釈を付け始める必要があります。
あなたは近づいた。これがコードです。
foreach (var property in modelBuilder.Model.GetEntityTypes()
.SelectMany(t => t.GetProperties())
.Where(p => p.ClrType == typeof(decimal)))
{
property.Relational().ColumnType = "decimal(18, 6)";
}
注:decimal?
としてNULL可能型がある場合は、次を使用します。
Where(p => p.ClrType == typeof(decimal) || p.ClrType == typeof(decimal?))