向派生类型添加属性

本文关键字:属性 添加 类型 派生 | 更新日期: 2023-09-27 18:13:00

我正在使用实体框架。我有一个由EF生成的名为Company的部分类。部分类看起来像:

类型'BaseModels。"Company"已经包含了"CompanyName"的定义"

public partial class Company {
    public string CompanyId { get; set; }
    public string CompanyName { get; set; }
}

我想做的是从Company创建一个派生类,它有一个额外的属性。

public class MyCompany : Company {
    public string UploadName { get; set; }
}

但是我想用一个自定义属性来修饰基本类型属性CompanyName。

我去了以下位置:如何从子类向基类的字段添加属性?

这确实回答了我的问题。问题是,如果我在基类中将CompanyName属性标记为"virtual",那么EF可以重新生成覆盖我的东西的代码。

我尝试定义一个局部类,但VS 2013抱怨当我试图添加:

public partial class Company {
    [Renderer("html")]
    public virtual string CompanyName { get; set; }
}

属性名称已经存在。

我该如何绕过这个障碍?

向派生类型添加属性

不能使用部分类定义已经存在的属性。在现有属性上添加属性,需要使用MetadataTypeAttribute。创建分部类:

[MetadataType(typeof(CompanyMetadata))]
public partial class Company { }

并使用带有所需属性的属性向项目添加元数据类:

public class CompanyMetadata
{
    [Renderer("html")]
    public string CompanyName { get; set; }
}

使Company成为一个抽象类。然后使用带有CompanyName的override关键字来添加自定义属性。您也可以添加UploadName