【问题标题】:Custom Validation with MVC2 and EF4使用 MVC2 和 EF4 进行自定义验证
【发布时间】:2010-05-01 11:31:38
【问题描述】:

ScottGu 的博客上是一个如何将 MVC2 自定义验证与 EF4 一起使用的示例: http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

那么问题来了:

当 VS2010 中的设计器为数据库创建对象时,除了示例之外,您还必须为该类添加 [MetadataType(typeof(Person_validation))] 注释。

但是当我在设计器中更改任何内容时,所有这些注释都会丢失。

是否可以保留自己对 edmx 文件所做的更改,或者有没有更好的方法将 System.ComponentModel.DataAnnotations 应用于生成的实体?

谢谢。

【问题讨论】:

    标签: asp.net-mvc entity-framework custom-validators


    【解决方案1】:

    您可以使用一种松散地称为“伙伴课程”的模式。基本上你所做的就是用你的元数据创建一个单独的类,然后创建一个将生成的实体耦合到你的伙伴类的部分类。

    举个简单的例子,假设您有一个Person 实体,并且您想将FirstName 属性设置为必需。这是您在生成的文件之外要做的事情:

    [MedadataType(typeof(PersonMetadata))]
    partial class Person { } // the other part is generated by EF4
    
    public class PersonMetadata
    {
        // All attributes here will be merged into the generated class,
        // thanks to the partial class above. Just apply attributes as usual.
    
        [Required]
        public string FirstName { get; set; }
    }
    

    您可以在here 找到有关此方法的更多详细信息。 ScottGu 实际上也谈到了它,在你链接到的文章中。查看标题“第 5 步:持久化到数据库”;)

    【讨论】:

    • 感谢您的回答,但问题更多是关于部分: [MedadataType(typeof(PersonMetadata))] partial class Person { } // 另一部分由 EF4 Buddy 类生成,注释为工作正常。但我的问题是:我有大约 100 个实体。如果我在 Visual Studio 的设计器中做一个小的改动,代码就会重新生成。所以所有引用伙伴类的注释 [MedadataType(typeof(....))] 都消失了。因此,如果我只是添加一个属性,我可以再次在 100 个类上添加注释。不完全是 EF 一代的想法。
    • @csharpnoob - 听起来好像您将MetadataTypeAttribute 添加到部分类的错误部分。这个想法是,由于 EF 生成部分类,您可以在 不同的文件 中编写 您自己的 部分,这些文件是 重新生成的,您可以在其中应用 @ 987654326@。我通常将应用属性的部分类与伙伴类放在同一个文件中,这样我就可以立即看到哪些类会受到更改的影响。
    • 该死的。对我的错!部分注释,我错过了那个小细节。这个无论如何都存在用于设置默认值。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多