我很好奇为什么要使用伙伴类来完成数据验证。请考虑以下示例,其中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时,为什么选择了这种“伙伴模式”?为什么不将属性直接放置在实体中?

最佳答案

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

如果您在不同的上下文中使用数据注释(例如,为 View 模型使用),则它们可以继续使用原始类本身。

10-02 01:53
查看更多