【问题标题】:Set default value for multiple columns in a single statement在单个语句中为多个列设置默认值
【发布时间】:2018-04-02 16:52:24
【问题描述】:

我使用的是 EF Core Code-First,需要为多个列设置默认值。

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

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

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

【问题讨论】:

  • 对不同的列重复 10 次有什么问题?这仍然只会使用一次。如果默认值是业务逻辑的一部分,则将其从数据库移至业务层职责,您可以在其中动态执行此操作
  • 这没有错。我只是想知道有没有什么方法可以减少代码并提高我的知识。
  • 这是 EntityFramework 还是 EntityFrameworkCore?
  • 正如我在标签中提到的,它是核心
  • 如果有办法减少代码 - “更少的代码”并不总是意味着更好的可读性或维护

标签: c# ef-code-first entity-framework-core ef-code-first-mapping


【解决方案1】:

您可以使用元数据 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];
}

【讨论】:

  • 感谢您的回复。也许我不清楚。每个字段的默认值都不相同。所以你的回答并不完全是我想要的,但我认为你可以通过扩展你的答案来获得另一种解决方案。
  • 看起来很有趣。我会尽力更新你。谢谢。
  • 使用这种方法,您会失去“重命名”工具的好处。
  • @Fabio,给你
  • 运行良好。我决定采用更长的方法(重复代码 10 次)。这个答案虽然内容丰富。谢谢!
猜你喜欢
  • 2017-12-26
  • 2019-10-03
  • 2014-05-06
  • 2013-04-08
  • 1970-01-01
  • 2013-03-15
  • 2011-04-19
  • 2019-10-26
  • 2012-06-06
相关资源
最近更新 更多