Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架核心-将十进制精度和比例设置为所有十进制属性_C#_Entity Framework_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 实体框架核心-将十进制精度和比例设置为所有十进制属性

C# 实体框架核心-将十进制精度和比例设置为所有十进制属性,c#,entity-framework,asp.net-core,entity-framework-core,C#,Entity Framework,Asp.net Core,Entity Framework Core,我想将所有十进制属性的精度设置为(18,6)。在EF6中,这非常简单: modelBuilder.Properties<decimal>().Configure(x => x.HasPrecision(18, 6)); 在我阅读之后,我尝试了类似的方法: foreach (var entityType in modelBuilder.Model.GetEntityTypes() .SelectMany(x => x.GetProperties()) .W

我想将所有十进制属性的精度设置为(18,6)。在EF6中,这非常简单:

modelBuilder.Properties<decimal>().Configure(x => x.HasPrecision(18, 6));
在我阅读之后,我尝试了类似的方法:

foreach (var entityType in modelBuilder.Model.GetEntityTypes()
    .SelectMany(x => x.GetProperties())
    .Where(x => x.ClrType == typeof(decimal)))
        {
            // what to do here?
        }

我想知道我是否在正确的轨道上,以及如何继续,或者如果没有,我是否应该开始在所有的
decimal
属性上添加数据注释。这是密码

foreach(modelBuilder.Model.GetEntityTypes()中的var属性)
.SelectMany(t=>t.GetProperties())
其中(p=>p.ClrType==typeof(十进制)| | p.ClrType==typeof(十进制?)
{
//EF核心1和2
property.Relational().ColumnType=“decimal(18,6)”;
//EF核心3
//SetColumnType(“十进制(18,6)”);
//EF核心5
//属性。设置精度(18);
//属性。设置刻度(6);
}

有一种非常野蛮的方法,但不知道是否有更优雅、更灵活的方法。您可以使用
modelBuilder.Entity(c=>c.hascollan(“DECIMAL(10,6)))对其进行配置
指定列的类型。但是,它可能会将您与某些类型的DB耦合,因为这些类型是DB特定的。这样,我必须在
OnModelCreating
方法中列出所有十进制属性,这与向所有类型添加数据注释没有太大区别,这是我试图避免的:)因为我必须继续开发,所以我手动设置了所有198个十进制属性(希望我没有遗漏任何属性),但如果有人想到如何循环使用所有这些属性,请在3小时前我开始键入所有200个属性时告诉我你在哪里DI把我的头撞在墙上,因为我以前用过它,它工作了,但突然之间,它不适合新的实体类型。原来我的
decimal
类型实际上是一个可为空的
decimal?
。要设置两者的默认值,请确保使用
匹配这两种类型,其中(p=>p.ClrType==typeof(decimal)| | p.ClrType==typeof(decimal?)
是否有方法以强类型方式设置精度?有什么
HasPrecision
fluent方法吗?@Shimmy还没有。按问题跟踪。这工作正常,但EFCore3中出现了问题-现在获取的
'IMutableProperty'不包含“Relational”的定义,并且找不到接受类型为“IMutableProperty”的第一个参数的可访问扩展方法“Relational”(是否缺少using指令或程序集引用?)
。有人知道我错过了什么吗?
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?
        }