EF创建的所有实体都是部分类。所以它是可扩展的。假设我有像
这样的实体Personpartial 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”在实体对象上没有有效的实体映射。有关更多信息,请参阅实体框架文档。
如何修复此解决方案?
答案 0 :(得分:0)
我刚刚犯了同样的错误。 不要使用" ReportPropertyChanged()"但是" OnPropertyChanged()"代替。你去吧。
ReportPropertyChanged()仅适用于真实实体对象(如FirstName和LastName,例如真实数据库字段),但不适用于那些计算对象(如Name,仅存在于您的分部类中)。
答案 1 :(得分:-1)
问题在于那些ReportPropertyChanged("Name")
,您向 ObjectStateManager 报告“Name”属性已被更改,而此属性在您的模型元数据中不存在(它只是已在您的部分类中声明, ObjectContext 和 ObjectStateManager 对此属性一无所知。
如果您添加OnLastNameChanged
和OnFirstNameChanged
部分方法,只需删除它们,就不需要它们。