【问题标题】:Adding attributes to a derived type将属性添加到派生类型
【发布时间】:2015-09-17 13:28:31
【问题描述】:

我正在与 合作。我有一个由 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。

我去了以下地点: 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; }
}

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

我该如何绕过这个障碍?

【问题讨论】:

  • what does VS2013 complain about???.. 还有你在哪里覆盖它在子类..?
  • 从 Visual Studio 生成的错误消息显示“'BaseModels.Company' 类型已经包含 'CompanyName' 的定义”。这是来自我试图在同一个项目中定义的部分类。
  • 这是 EF Database First..?如果是这样,这里是一步一步阅读的链接stackoverflow.com/questions/19021991/…
  • 无法从派生类型向非虚拟基成员添加属性。并且您不能使用partial更改 成员,只能添加 成员。我会硬着头皮使用不同的类型。使用实体类型just 来操作数据,并将它们映射到您可以随意装饰的“域”类型。除非你想做一些奇怪的映射,否则像 AutoMapper 这样的工具可以让它变得非常轻松。

标签: entity-framework c# entity-framework


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 但是公司类是由实体框架生成的。我不确定这将如何解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多