實體框架核心 - 將小數精度和比例設置為所有小數屬性

asp.net-core c# entity-framework entity-framework-core

我想將所有十進制屬性的精度設置為(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;

我看後這個 ,我嘗試了類似的方法:

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? , 使用:

Where(p => p.ClrType == typeof(decimal) || p.ClrType == typeof(decimal?))


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow