为什么使用伙伴类进行验证?

发布于 2024-10-19 03:02:13 字数 443 浏览 4 评论 0原文

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

I am curious as to why data validation is done using buddy classes. Consider the following example, where MyEntity is a Linq-to-SQL or Linq-to-Entities entity, and the class below is a partial class enhancing the entity.

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

Why is the design so? When they designed DataAnnotations, why was this "buddy pattern" selected? Why not place the attributes directly in the entity?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

潇烟暮雨 2024-10-26 03:02:13

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

I assume this prevents generated entities from overwriting custom Meta Data information.

洛阳烟雨空心柳 2024-10-26 03:02:13

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

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

The reason is practical - in linq-to-sql and linq-to-entities, the code representing the classes regenerated every time the object model is updated. In order for the annotations not to be overwritten when this happens, they need to be in a separate "buddy" class.

If you're using Data Annotations in a different context - say for a view model - then they can go on the original class itself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文