2012-06-21 47 views
2

我有從我的數據庫(Visual Studio 2010,asp.net 4.0,c#)生成的EntityDataModel。 我想使用與實體類關聯的部分類來執行一些業務邏輯(在這種情況下檢查電話號碼字段並刪除空格)。如何修改EntityDataModel的部分類中的對象的值

如果我使用類似的東西:

partial void OnMobilePhoneNoChanged() 
    { 
     if (MobilePhoneNo != null) 
     { 
      MobilePhoneNo = ATG_COModel_Common.FormatPhoneNumber(MobilePhoneNo); 
     } 
    } 

然後我最終得到一個無限循環(因爲我FormatPhoneNumber方法修改MobilePHoneNo再次等引發事件),然後我得到...堆棧溢出!

當我嘗試使用OnMobilePhoneNoChanging而不是修改MobilePHoneNo屬性(或value值)時,該值未正確保存。

我該怎麼辦?

回答

2

看看你的模型的.Designer.cs文件。你會看到這樣的事情:

/// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.String MobilePhoneNo 
    { 
     get 
     { 
      return _MobilePhoneNo; 
     } 
     set 
     { 
      OnMobilePhoneNoChanging(value); 
      ReportPropertyChanging("MobilePhoneNo"); 
      _MobilePhoneNo = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("MobilePhoneNo"); 
      OnMobilePhoneNoChanged(); 
     } 
    } 
    private global::System.String _MobilePhoneNo; 
    partial void OnMobilePhoneNoChanging(global::System.String value); 
    partial void OnMobilePhoneNoChanged(); 

注意,以及部分ChangingChanged方法你已經知道,有一個支持字段。由於您的代碼位於類別的部分中,因此您可以訪問所有成員,包括私人成員。所以,你可以實現局部Changed方法,並直接改變_MobilePhoneNo

partial void OnMobilePhoneNoChanged() 
{ 
    if (_MobilePhoneNo != null) 
    { 
     _MobilePhoneNo = ATG_COModel_Common.FormatPhoneNumber(_MobilePhoneNo); 
    } 
} 

這是你想要的。

+0

謝謝,這工作正常:) – NDUF