Entity framework 4 如何从EF扩展实体?

Entity framework 4 如何从EF扩展实体?,entity-framework-4,Entity Framework 4,EF创建的所有实体都是分部类。因此它是可扩展的。假设我有一个像你这样的人 partial class Person{FirstName, LastName, .....} 然后我想添加一个计算属性名,如: partial class Person{ [DataMember] public string Name { get { return String.Format("{0} {1}", this.FirstName, this.LastName); } } par

EF创建的所有实体都是分部类。因此它是可扩展的。假设我有一个像你这样的人

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”在实体对象上没有有效的实体映射。有关更多信息,请参阅实体框架文档


如何修复此解决方案?

问题在于那些
ReportPropertyChanged(“Name”)
,您正在向ObjectStateManager报告“Name”属性已更改,而此属性在您的模型元数据中不存在(它刚刚在分部类中声明,ObjectContext和ObjectStateManager对此属性一无所知)。

如果添加那些
OnLastNameChanged
OnFirstNameChanged
分部方法,只需去掉它们,您就不需要它们。

问题在于那些
ReportPropertyChanged(“Name”)
,您向ObjectStateManager报告“Name”属性已更改,而此属性在模型元数据中不存在(它刚刚在分部类中声明,ObjectContext和ObjectStateManager对此属性一无所知)。

如果您添加那些
OnLastNameChanged
OnFirstNameChanged
分部方法,只需将它们删除,您就不需要它们了。

我刚刚遇到了相同的错误。 不要使用“ReportPropertyChanged()”而是使用“OnPropertyChanged()”。好了


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

我刚刚遇到了相同的错误。 不要使用“ReportPropertyChanged()”而是使用“OnPropertyChanged()”。好了


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

如果有一个WPF控件绑定到一个Person集合,并且该控件显示该列在UI中更新的computed Name属性(如果名字或姓氏发生变化),那么您必须做什么?如果有一个WPF控件绑定到一个Person集合,并且该控件显示如果名字或姓氏更改,该列在UI中更新的计算名称属性?您是否尝试对UI绑定执行此操作?如果是,您最终做了什么使其工作?谢谢。您是否尝试对UI绑定执行此操作?如果是,您最终做了什么使其工作?谢谢。