如何从EF扩展实体?

时间:2010-10-28 19:09:04

标签: entity-framework-4

EF创建的所有实体都是部分类。所以它是可扩展的。假设我有像

这样的实体Person
partial class Person{FirstName, LastName, .....}

然后我想添加一个计算属性名称,如:

partial class Person{

[DataMember]        
public string Name
{
   get { return String.Format("{0} {1}", this.FirstName, this.LastName); }
}

partial void OnFirstNameChanged()
{
  //.....
  this.ReportPropertyChanged("Name");
}

partial void OnLastNameChanged()
{
  //.....
  this.ReportPropertyChanged("Name");
}
//....
}

然后,对于数据更新操作,我收到以下错误: 属性“Name”在实体对象上没有有效的实体映射。有关更多信息,请参阅实体框架文档。

如何修复此解决方案?

2 个答案:

答案 0 :(得分:0)

我刚刚犯了同样的错误。 不要使用" ReportPropertyChanged()"但是" OnPropertyChanged()"代替。你去吧。

ReportPropertyChanged()仅适用于真实实体对象(如FirstName和LastName,例如真实数据库字段),但不适用于那些计算对象(如Name,仅存在于您的分部类中)。

答案 1 :(得分:-1)

问题在于那些ReportPropertyChanged("Name"),您向 ObjectStateManager 报告“Name”属性已被更改,而此属性在您的模型元数据中不存在(它只是已在您的部分类中声明, ObjectContext ObjectStateManager 对此属性一无所知。
如果您添加OnLastNameChangedOnFirstNameChanged部分方法,只需删除它们,就不需要它们。