我在VS2010中使用了Entity Framework,以创建具有属性,firstName,lastName和email的简单人类。如果我想像在本博客文章中那样附加DataAnnotations,则我会遇到一个小问题,因为我的person类是动态生成的。我可以直接编辑动态生成的代码,但是任何时候我必须更新模型时,所有验证代码都会被清除。
第一个本能是创建一个局部类并尝试附加注释,但它抱怨我试图重新定义该属性。我不确定是否可以像使用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类可能更合适。