2010-10-28 113 views
2

EF创建的所有实体都是部分类。所以它是可扩展的。假设我有实体的人喜欢如何从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"); 
} 
//.... 
} 

然后进行数据upate操作我得到了以下错误: 属性“名称”没有一个有效的实体对象映射。有关更多信息,请参阅实体框架文档。

如何解决此问题?

+0

你试图做这个UI绑定?如果是这样,你最终做了什么以便它起作用?谢谢。 – Chad 2010-12-12 18:49:56

回答

-1

问题是与那些ReportPropertyChanged("Name"),你是报告ObjectStateManager的“名称”属性已经改变,而这家酒店不模型中的元数据存在(它刚刚在局部类中声明,ObjectContextObjectStateManager对此属性一无所知)。
如果你添加了那些OnLastNameChangedOnFirstNameChanged部分方法,只是摆脱它们,你不需要它们。

+1

那么你需要做什么,以便如果有一个绑定到Person集合的WPF控件,并且控件显示计算的Name属性,那么如果名字或姓氏更改,那么该列将在UI中更新? – Chad 2010-12-12 18:49:13

0

我刚才有同样的错误。 请改用“ReportPropertyChanged()”,而不要使用“OnPropertyChanged()”。你走了。 ReportPropertyChanged()仅适用于真正的实体对象(如FirstName和LastName,例如真正的数据库字段),但不适用于那些计算的对象(如名称,它只存在于您的部分类中)。