【发布时间】:2017-09-02 18:44:53
【问题描述】:
我想将所有小数属性的精度设置为 (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 属性上添加数据注释。
【问题讨论】:
-
有一个相当粗暴的方法,但不知道是否有更优雅和灵活的方法。您可以使用
modelBuilder.Entity<MyEntity>(c => c.HasColumn("DECIMAL(10,6"))对其进行配置以指定列的类型。但是,它可能会将您耦合到某些类型的数据库,因为这些类型是特定于数据库的 -
这样我必须在
OnModelCreating方法中列出所有小数属性,这与向所有这些属性添加 DataAnnotations 没有什么不同,这是我试图避免的:) -
因为我必须继续开发,所以我手动设置了所有 198 个十进制属性(希望我没有遗漏任何一个),但是如果有人想到如何循环遍历所有这些属性,请告诉我
标签: c# entity-framework asp.net-core entity-framework-core