DataAnnotations WriteOnly如果属性== null
本文关键字:null 属性 如果 WriteOnly DataAnnotations | 更新日期: 2023-09-27 18:05:31
我有以下属性:
public virtual String Firstname { get; set; }
,我只希望能够写入字段,如果它目前是空的(未设置),这可以通过DataAnnotations实现吗?
数据注释是用于验证的元数据,因此您可以创建自定义数据注释来验证属性值,但验证不能确保您的属性不会被设置,如果它已经有值。这些代码应该是属性setter本身的一部分,比如:
private string _firstName;
public string FirstName
{
get
{
return _firstName;
}
set
{
if (_firstName != null) throw ...
_firstName = value;
}
}
如果数据注释只是指属性,那么答案是:它可以通过属性来实现,但是你需要一些东西来实现与属性相关的一些逻辑。这通常是通过面向方面编程(AOP)完成的,在AOP中,您将创建标记属性,这些属性将被一些复杂的API使用。API将基于该属性用自定义代码包装你的类,在编译时(例如PostSharp)或运行时(例如Unity, Spring.NET)添加if
语句。
另一种实现这一点的方法,对我来说更优雅,不为属性实现set
,而只实现get
private string _firstName;
public string FirstName
{
get
{
return _firstName;
}
}
和有一个功能:
public void SetFirstName(string FirstName)
{
_firstName = FirstName;
}
没有异常,没有返回值处理。您有一个属性(唯一的retrieve
值)和一个函数或构造函数(为什么不,取决于您的体系结构,很难从文章中推断),只初始化一次。
通过我,你的对象的API将更加清晰和直接的这种方式。
问候。
还有一个特定的DataAnnotation语法来实现这一点:
[DisplayFormat(NullDisplayText = "some string")]
public virtual String Firstname { get; set; }