为什么好友类用于验证?

时间:2011-02-24 20:00:33

标签: c# .net data-annotations

我很好奇为什么使用好友类进行数据验证。请考虑以下示例,其中MyEntity是Linq-to-SQL或Linq-to-Entities实体,下面的类是增强实体的部分类。

[MetadataType(typeof(MyEntity.MyEntityMetadata))]
public partial class MyEntity
{
    private class MyEntityMetadata
    {
        [Required(ErrorMessage = "The title is required.")]
        public string Title { get; set; }
    }
}

为什么设计如此?当他们设计DataAnnotations时,为什么选择这种“伙伴模式”?为什么不直接将属性放在实体中?

2 个答案:

答案 0 :(得分:5)

我认为这可以防止生成的实体覆盖自定义元数据信息。

答案 1 :(得分:4)

原因很实际 - 在linq-to-sql和linq-to-entities中,表示每次更新对象模型时重新生成的类的代码。为了在发生这种情况时不要覆盖注释,它们需要在一个单独的“伙伴”类中。

如果您在不同的上下文中使用数据注释 - 例如视图模型 - 那么他们可以继续使用原始类本身。