【问题标题】:Entity Framework default value for multiple properties多个属性的实体框架默认值
【发布时间】:2015-12-09 03:46:18
【问题描述】:

是否可以仅通过一个相关属性默认多个值? 我发现逐行设置有点笨拙。

public class FooBarCounter{
        [Key]
        public int id{ get; set; }
        [DefaultValue(0)]
        public int FooCounter1 { get; private set; }
        [DefaultValue(0)]
        public int FooCounter2 { get; private set; }

        [DefaultValue(5)]
        public int BarCounter1 { get; private set; }
        [DefaultValue(5)]
        public int BarCounter2 { get; private set; }        
    }

编辑:

所以 [Attrib] 每隔一行出现一次,我宁愿这样:

[Authorize]
public class MyFullyAuthorizedClass : Controller {
   //props, methoods etcetc
}

这里的 [Authorize] 会影响整个班级,就像我将它放在每个方法之前一样,现在这也不是最好的,因为我有多个默认值,但它只有 1 行,而不是每个第二行中的锅炉。希望我现在更清楚了。

有什么想法吗?

【问题讨论】:

  • “一个相关属性”是什么意思?
  • afaik,你需要构造一个实例。如果您希望 int 为 0,则不需要该属性。但是如果你想为各种属性设置不同的值,你将不得不一个一个地去做。如果您正在寻找一个可以一次性更改所有值的地方,那么 Perttu 的答案将成立。另外我想提一下,如果你不喜欢属性,你可以使用 c# 6 的属性初始化器。
  • 我不完全确定问了什么;问题标题是“多个属性的默认值”,我试图回答。
  • 我的意思是你可以在类定义之前定义 [Authorize],它会影响整个类。我的观点是,在一个更大的类中,我可以将它们一起定义,所以我不需要在每一行都有 [DefaultValue(x)]。
  • 您是否考虑过在构造函数中设置默认值而不是属性?

标签: c# entity-framework attributes default-value


【解决方案1】:

DefaultValue 属性是valid on all targets - 因此您可以根据需要在类级别设置它,并编写查找它并对其做出反应的代码。

然而,任何实体框架实现都不太可能寻找并应用它 - it's not part of the EF spec

【讨论】:

  • 感谢指出,我认为这些来自 ef 但使用 System.ComponentModel.DataAnnotations 将没有任何意义。我不是一个完整的答案,但我开始认为不可能在属性下对道具进行分组,除非我在类级别上这样做,所以我不能在对象中使用它来定义多个默认“组”。如果在周一之前没有更好的答案,我会接受它作为答案。
  • 如果您在 Entity Framework 中使用代码优先迁移,您可以将数据库中的默认值配置为 here。您还可以使用类级属性并编写一个静态助手,该助手可以从任何构造函数中调用以应用任何声明的默认值。
  • 如果使用 1 个类范围的默认值,我确实解决了,其余的来自构造函数。我们也可以通过 EF7 的 ef 模型构建器来实现。
【解决方案2】:
public class FooBarCounter{
    private const int DEFAULTVALUE = 0;

    [DefaultValue(DEFAULTVALUE)]
    public int FooCounter1 { get; private set; }
    [DefaultValue(DEFAULTVALUE)]
    public int FooCounter2 { get; private set; }
    // and so on ...

}

【讨论】:

  • 他只想要一个相关属性,你的答案有多个属性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
相关资源
最近更新 更多