将属性添加到派生类型

时间:2015-09-16 19:01:44

标签: c# entity-framework

我正在与合作。我有一个由EF生成的名为Company的部分类。部分类看起来像:

  

“BaseModels.Company”类型已包含“CompanyName”的定义“

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

我想要做的是从公司创建一个具有额外属性的派生类。

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

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

我去了以下地点: How do I add an attribute to the field of the base class from child class?

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

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

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

通过声明属性名称已经存在。

我如何克服这个障碍?

2 个答案:

答案 0 :(得分:1)

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

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

并使用具有所需属性的属性将元数据类添加到项目中:

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

答案 1 :(得分:0)

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