2010-10-28 115 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,例如真正的數據庫字段),但不適用於那些計算的對象(如名稱,它只存在於您的部分類中)。