重写实体框架实体属性

本文关键字:实体 属性 框架 重写 | 更新日期: 2023-09-27 17:50:17

我在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'的定义

任何想法?


问候,瑞安

重写实体框架实体属性

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

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

看看这个链接,看看生成元数据类的一些问题,我通常做的是,如果我改变了一些东西,我只是通过添加新服务和删除服务来重新生成元数据类,然后合并两者,保留我的旧更改并保留新添加的实体。

不幸的是,您不能在POCO中生成的属性中添加任何注释。

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

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

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

我相信你也应该把你的属性标记为局部。

实际上我认为你也会想要删除重写(因为你没有重写一个父属性)