将DataAnnotations与实体框架一起使用

asp.net-mvc-2 c# entity-framework validation

我已经使用VS2010的Entity Framework创建了一个包含属性,firstName,lastName和email的简单person类。如果我想像在这篇博客文章中那样附加DataAnnotations,我会遇到一个小问题,因为我的人员类是动态生成的。我可以直接编辑动态生成的代码,但每当我必须更新我的模型时,我的所有验证代码都将被删除。

第一直觉是创建一个局部类并尝试附加注释,但它抱怨我正在尝试重新定义属性。我不确定你是否可以在C#中使用C ++中的函数声明来进行属性声明。如果可能,那可能就是答案。这是我尝试过的片段:

namespace PersonWeb.Models
{
  public partial class Person
  {
    [RegularExpression(@"(\w|\.)+@(\w|\.)+", ErrorMessage = "Email is invalid")]
    public string Email { get; set; } 
    /* ERROR: The type 'Person' already contains a definition for 'Email' */
  }
}

一般承认的答案

伙伴类或多或少是您的代码片段旅行的方向,除了您手动编写的部分Person类将具有内部类,如:

[MetadataType(typeof(Person.Metadata))]
public partial class Person {
    private sealed class MetaData {
        [RegularExpression(...)]
        public string Email { get; set; }
    }
}

或者您可以拥有手动部分Person类和单独的Meta类,如:

[MetadataType(typeof(PersonMetaData))]
public partial class Person { }

public class PersonMetaData {
[RegularExpression(...)]
public string Email;
}

这些是变通方法,并且具有映射的Presentation类可能更合适。


热门答案

您需要将元数据“伙伴”类或(我的首选项) 项目用于表示模型,而不是将视图直接绑定到实体



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因