【问题标题】:Override Entity Framework Entity Property覆盖实体框架实体属性
【发布时间】:2011-04-16 21:20:01
【问题描述】:

我在 EF 中有一个名为 Profile 的实体,我想将数据注释属性添加到该实体的 FirstName 属性中。所以,我像这样创建了一个新的部分类;

public partial class Profile : EntityObject
{
    [Required]
    [Display(Name = "First Name")]
    [EdmScalarPropertyAttribute(EntityKeyProperty = false, IsNullable = false)]
    [DataMemberAttribute()]
    override public global::System.String FirstName
    {
        get
        {
            return _FirstName;
        }
        set
        {
            OnFirstNameChanging(value);
            ReportPropertyChanging("FirstName");
            _FirstName = StructuralObject.SetValidValue(value, false);
            ReportPropertyChanged("FirstName");
            OnFirstNameChanged();
        }
    }
}

但我得到了这个;

CC.Models.Profile”类型已经包含“FirstName”的定义

有什么想法吗?

问候,
瑞恩

【问题讨论】:

    标签: c# entity-framework asp.net-mvc-3 overriding


    【解决方案1】:

    不幸的是,你不能那样改变它。您必须创建一个元数据类并将元数据属性添加到该类。见以下链接:

    http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

    查看this 链接以查看生成元数据类的一些问题,我通常所做的是,如果我更改某些内容,我只是通过添加新服务并随后删除服务来重新生成元数据类,然后将两者合并保留我的旧更改并保留新添加的实体。

    【讨论】:

      【解决方案2】:

      很遗憾,您不能向 POCO 中生成的属性添加任何注释。

      一种可能的解决方法是修改 TT 模板,为您只想定位的给定属性+实体添加您想要的自定义注释。

      当我想使用企业库来实现验证时,我在之前的项目中遇到了同样的问题。我最终创建了一个部分类并编写了用注释装饰的方法。

      在您的情况下,您可以尝试在部分类中创建一个属性(具有不同的名称),该属性返回带有注释的 EF 实体属性。

      【讨论】:

        【解决方案3】:

        我相信你也必须将你的财产标记为部分。

        实际上我认为您还想删除覆盖(因为您没有覆盖父属性。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-02
          相关资源
          最近更新 更多