C# 为单个语句中的多个列设置默认值

C# 为单个语句中的多个列设置默认值,c#,ef-code-first,entity-framework-core,ef-code-first-mapping,C#,Ef Code First,Entity Framework Core,Ef Code First Mapping,我首先使用EF核心代码,需要为多个列设置默认值 我知道这是为一列设置默认值的语句 modelBuilder.Entity<Registration>() .Property(b => b.AdminFee) .HasDefaultValue(25); modelBuilder.Entity() .Property(b=>b.AdminFee) .HasDefaultValue(25

我首先使用EF核心代码,需要为多个列设置默认值

我知道这是为一列设置默认值的语句

modelBuilder.Entity<Registration>()
                        .Property(b => b.AdminFee)
                        .HasDefaultValue(25);
modelBuilder.Entity()
.Property(b=>b.AdminFee)
.HasDefaultValue(25);

我有10个不同默认值的字段,我想看看是否有一种短方法可以一次性为所有字段设置默认值,而不是重复上述代码10次。

您可以使用元数据API来实现它。例如:

var myProps = new Dictionary<string, object>()
{
    { nameof(Registration.AdminFee), 25 },
    { nameof(Registration.AnotherProp1), 35 },
    { nameof(Registration.AnotherProp2), 18 },
    { ... }
};

foreach (var matchingProp in modelBuilder.Entity<Registration>()
            .Metadata
            .GetProperties()
            .Where(x => myProps.ContainsKey(x.Name)))
{
    matchingProp.Relational().DefaultValue = myProps[matchingProp.Name];
}
var myProps=newdictionary()
{
{nameof(Registration.AdminFee),25},
{姓名(注册号:AnotherProp1),35},
{姓名(注册号:AnotherProp2),18},
{ ... }
};
foreach(modelBuilder.Entity()中的var matchingProp)
.元数据
.GetProperties()
.Where(x=>myProps.ContainsKey(x.Name)))
{
matchingProp.Relational().DefaultValue=myProps[matchingProp.Name];
}

对不同的列重复10次有什么不对?这仍然是一个将只使用一次。若默认值是业务逻辑的一部分,那个么将它从数据库移动到业务层职责,在那个里您可以动态地执行它—这并没有错。我只是想知道是否有任何方法可以减少代码并提高我的知识。这是EntityFramework还是EntityFrameworkCore?正如我在标签中提到的,这是Core如果有任何方法可以减少代码-“减少代码”并不总是意味着更好的可读性或维护谢谢你的回复。也许我不清楚。每个字段的默认值不同。所以你们的答案并不完全是我想要的,但我认为你们可以通过扩展你们的答案找到另一个解决方案。看起来很有趣。我会试试的,这会给你更新的。谢谢。使用这种方法,您将失去“重命名”工具的好处。@Fabio,您在这里工作得很好。我决定使用更长的方法(重复代码10次)。不过,这个答案提供了信息。非常感谢。