在部分类中设置属性的属性

我有一个由Entity Framework (EF)生成的员工类。

public partial class employee { private string name; public string Name { get{return name;} set{ name = value;} } } 

现在我想在name属性中放置一个必需的属性,用于在我编写的另一个员工部分类中进行MVC3validation,以扩展由EF生成的那个,这样我就不必重写我的代码了如果我刷新EF生成的模型。

我写的部分类在同一个程序集和名称空间中。

 public partial class employee { // What should I write here to add required attribute in the Name property? } 

它实际上只能通过好友类来实现,但不建议这样做。 您应该在自定义视图模型中保留validation,因为通常需要对不同视图进行不同的validation,但您的实体只能保留一组validation属性。

好友类的例子:

 using System.ComponentModel.DataAnnotations; [MetadataType(typeof(EmployeeMetadata))] public partial class Employee { private class EmployeeMetadata { [Required] public object Name; // Type doesn't matter, it is just a marker } } 

据我所知,你不能 – 这是不可行的。

您应该看看MVC3是否有任何方法可以在其他属性(例如,类型)中添加另一个属性相关的属性。

或者,您可以添加代理属性:

 [ValidationAttributesHere] public string ValidatedName { get { return Name; } set { Name = value; } } 

另一种方法是:

 private class EmployeeMetadata { //the type HAS to match what your have in your Employee class [Required] public string Name { get; set; } } public partial class Employee : EmployeeMetadata { } 

至少这适用于Linq to SQL。 但是我无法通过GetCustomAttributes访问属性(即使使用System.Attribute.GetCustomAttributes似乎没有帮助)。 尽管如此,MVC确实尊重这些属性。 此外,这不适用于inheritance接口。 从接口传递属性只能使用MetadataType类属性(请参阅Ladislav Mrnka的回答 )。