DataAnnotations WriteOnly if property == null

时间:2011-08-15 12:52:57

标签: c# data-annotations

我有以下属性:

public virtual String Firstname { get; set; }

我只希望能够写入该字段,如果它当前为空(未设置),这可以通过DataAnnotations实现吗?

3 个答案:

答案 0 :(得分:4)

数据注释是用于验证的元数据,因此您可以创建自定义数据注释来验证属性值,但验证无法确保如果属性已经具有值,则不会设置该属性。这是代码,它应该是属性的setter本身的一部分,如:

private string _firstName;

public string FirstName
{
    get 
    {
        return _firstName;
    }
    set
    {
        if (_firstName != null) throw ...
        _firstName = value;
    }
}

如果通过数据注释你只是意味着属性,那么答案是:它可以通过属性实现,但是你需要一些能够实现与属性相关的逻辑的东西。这通常通过面向方面编程(AOP)来完成,您将在其中创建将由某些复杂API使用的标记属性。 API将基于该属性用自定义代码包装您的类,在编译时(例如PostSharp)或运行时(例如Unity,Spring.NET)添加if语句。

答案 1 :(得分:1)

通过我更优雅的另一种方式来实现这一点,不要为该属性实现set,而只是get

private string _firstName;

public string FirstName
{
    get 
    {
        return _firstName;
    }

}

并有一个功能:

public void SetFirstName(string FirstName) 
{
   _firstName = FirstName;
}

所以没有例外,没有返回值处理。您有一个属性唯一的retrieve值,一个函数或构造函数(为什么不,取决于您的体系结构,很难从帖子中扣除) 初始化只有一次。

通过我,您的对象的API将以这种方式更加清晰明了。

问候。

答案 2 :(得分:0)

还有一种特定的DataAnnotation语法来实现这一目标:

(i_min, i_max)