首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以在分部类中定义属性,然后在另一个分部类中用属性标记它们吗?

我可以在分部类中定义属性,然后在另一个分部类中用属性标记它们吗?
EN

Stack Overflow用户
提问于 2010-09-24 04:43:44
回答 5查看 38.2K关注 0票数 91

有没有一种方法可以让我有一个像这样的代码文件:

public partial class A 
{
    public string a { get; set; }
}

然后在另一个文件中:

public partial class A 
{
    [Attribute("etc")]
    public string a { get; set; }
}

这样我就可以从数据库中生成一个类,然后使用一个非生成的文件来标记它?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-24 05:05:07

我在Scott Guthrie的一篇文章中看到过这样的事情(接近尾声)-尽管我自己没有尝试过。

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

[MetadataType(typeof(Person_Validation))]
public partial class Person
{
    // Partial class compiled with code produced by VS designer
}

[Bind(Exclude="ID")]
public class Person_Validation
{
    [Required(ErrorMessage = "First Name Required")]
    [StringLength(50, ErrorMessage = "Must be under 50 characters")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name Required")]
    [StringLength(50, ErrorMessage = "Must be under 50 characters")]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Age Required")]
    [Range(0, 120, ErrorMessage = "Age must be between 0 and 120")]
    public int Age { get; set; }

    [Required(ErrorMessage = "Email Required")]
    [Email(ErrorMessage = "Not a valid email")]
    public string Email { get; set; }
}
票数 35
EN

Stack Overflow用户

发布于 2013-10-19 12:33:45

这是我在这种情况下一直使用的解决方案。当您有想要用属性装饰的自动生成的类时,它很有用。假设这是自动生成的类:

public partial class UserProfile
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
}

比方说,我想添加一个属性来指定UserId是键。然后我会在另一个文件中创建一个分部类,如下所示:

[Table("UserProfile")]
[MetadataType(typeof(UserProfileMetadata))]
public partial class UserProfile
{
    internal sealed class UserProfileMetadata
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }
    }
}
票数 93
EN

Stack Overflow用户

发布于 2017-02-25 00:34:24

这就是我的答案

不同的类文件,或者您可以将元数据合并到同一个文件中,但保留名称空间和same..so,它们可以明显地看到彼此。

请记住,当您更新模型时,如添加更多列,您还必须更新项目类。

--your model class
public partial class A {
    public string a {get; set;}
}

--your project class 
public class Ametadata {
     [Attribute("etc")]
     public string a {get; set;}
}


[MetadataType(typeof(Ametadata))]
public partial class A
{
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3782405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档