有没有办法覆盖部分类中属性的应用顺序?

时间:2015-09-29 17:45:37

标签: c# entity-framework data-annotations asp.net-dynamic-data class-attributes

我有2个包含部分类的文件。生成的和手动的。我想覆盖,级联或以其他方式指定在编译时应用属性的顺序,以便更改其中一个类成员属性。

生成的代码:

[Table("dbo.product_variation")]
public partial class ProductVariation
{
    [Key]
    [Column("id")]
    public int Id { get; set; }

    [Required]
    [Column("style_id")]
    public int StyleId { get; set; }

    [Required]
    [Column("name"), StringLength(400)]
    public string Name { get; set; }

    [Column("general_description"), StringLength(2048), UIHint("MultilineText")]
    public string GeneralDescription { get; set; }
}

手动代码:

[MetadataType(typeof(ProductsMetadata))]
public partial class ProductVariation
{
}

public partial class ProductsMetadata
{
    [UIHint("RichText")]
    public string GeneralDescription { get; set; }
}

这里的真实意图是使用UIHint覆盖UIHint(" MultilineText")(" RichText")。这是一个很好的一台开发机器,而不是另一台开发机器,这让我相信1)也许我不应该指定两次特定属性,或者2)也许有办法强制命令覆盖属性正确。

2 个答案:

答案 0 :(得分:3)

这是不可能的,源中属性的排序对编译器没有任何意义。

17.2 Attribute specification - MSDN

  

在这样的列表中指定属性的顺序,以及   附加到同一程序实体的部分的顺序   安排,并不重要

如果您有部分类,并且在不同的源文件中使用了不同的属性,则编译器只会合并它们。

正如我所说,你不能让一个属性声明覆盖另一个声明,但是你在控制运行时使用该属性的代码时可以做的是获取所有应用的属性,应用你想要的任何顺序并且只使用其中一个。但我不认为这是你的情况。

答案 1 :(得分:0)

没有。关键字partial表示类(结构等)定义在两个或多个源文件上进行拆分,仅此而已。如果您将每个部分复制到单个文件中并删除partial关键字,它将是相同的。 从技术上讲,您可以使用[AttributeUsage(Inherited=false)] Are Method Attributes Inherited in C#?

更改派生类中的属性