重写实体框架实体属性
本文关键字:实体 属性 框架 重写 | 更新日期: 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实体属性,并在顶部添加注释。
我相信你也应该把你的属性标记为局部。
实际上我认为你也会想要删除重写(因为你没有重写一个父属性)