StringLengh数据注释使用静态属性

时间:2015-12-22 07:55:57

标签: c# .net entity-framework

我想在实体上使用StringLength属性,而不是使用文字或常量来使用静态属性。

e.g

[StringLength(MyClass.MyStaticProperty)]
public string Code { get; set; }

然而,这会导致以下错误......

  

属性参数必须是常量表达式,typeof表达式   或属性参数类型

的数组创建表达式

...除了使用字符串文字或常量之外,还有其他任何人可以解决这个问题吗?

如果你想知道为什么是静态属性? static属性将从注入的单例中返回一个值。该值将在应用程序启动时注入。

谢谢......圣诞快乐......

2 个答案:

答案 0 :(得分:3)

创建自己的属性可能是最好的解决方案。然后,您还可以控制以后可能要实现的任何其他逻辑。

public class CustomStringLength: ValidationAttribute
{
    public CustomStringLength()
    {
    }

    public override bool IsValid(object value)
    {
        return (string)value.Length == MyClass.MyStaticProperty;
    }
}

考虑MyClass.MyStaticPropertyint

用法:

[CustomStringLength]
public string Code { get; set; }

答案 1 :(得分:1)

StringLength属性参数应在编译时中知道。

您可以指定确切的值或引用常量值:

public static class MyClass
{
    public const int MyStaticProperty = 5;
}

[StringLength(MyClass.MyStaticProperty)]
public string Code { get; set; }

请注意,没有static个关键字,因为const暗示static