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

时间:2011-07-25 08:17:17

标签: c# entity-framework class partial

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

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

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

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

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

3 个答案:

答案 0 :(得分:27)

实际上只有通过好友级才有可能,但不推荐这种方法。您应该在自定义视图模型中保留验证,因为通常需要对不同视图进行不同的验证,但您的实体只能保留一组验证属性。

好友类的例子:

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
  }
}

答案 1 :(得分:9)

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

您应该看看MVC3是否有任何方法可以将关联的属性添加到其他属性(例如,类型)。

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

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

答案 2 :(得分:0)

另一种方法是:

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确实尊重这些属性。此外,这不适用于继承接口。从界面传递属性只能使用MetadataType类属性(参见answer by Ladislav Mrnka)。