C# 3.0分部方法應用 之 檢驗資料實體欄位

來源:互聯網
上載者:User

  上一篇文章介紹了C# 3.0中的分部方法(http://www.cnblogs.com/AndersLiu/archive/2007/07/30/836870.html),並給出了幾種應用情境。本文繼續介紹一種實用的情境——對實體類的欄位進行驗證。

  如果是自己手寫實體類,通常會在資料欄位所對應的屬性的set訪問器中增加對值進行驗證的代碼,這樣可以避免不符合資料庫要求的資料進入資料庫(儘管資料庫也會進行驗證,但等待資料庫拋出異常未免有點過分)。

  而對於Linq自動產生的實體類來說,是不會產生這些代碼代碼的。而如果我們手動修改Linq to SQL自動產生的程式碼,我們會鬱悶地發現——當在xxx.dbml設計器中對實體類進行了編輯之後,所有這些代碼會重新自動產生一次——我們的修改將被覆蓋!(這是相當鬱悶的一件事,我曾費盡艱辛給自動產生的所有public類型及其public成員添加了xml文檔注釋,可就因為在dbml設計器中做了一個小小的改動,結果,所有注釋都沒有了……)

  此時,分部方法就派上用場了。VS2008還是比較仗義的,為了方便使用者擴充,它產生的所有實體類都是partial的,同時,根據前一篇文章中的“情境1”,它還聲稱了一系列partial方法。比如:

  [Column(Storage="_AccessKey", DbType="NVarChar(32) NOT NULL", CanBeNull=false)]
  public string AccessKey
  {
   get
   {
    return this._AccessKey;
   }
   set
   {
    if ((this._AccessKey != value))
    {
     this.OnAccessKeyChanging(value);  // 注意,此處調用的是partial方法,實現了一個“輕量級事件”
     this.SendPropertyChanging();
     this._AccessKey = value;
     this.SendPropertyChanged("AccessKey");
     this.OnAccessKeyChanged();  // 注意,此處調用的是partial方法,實現了一個“輕量級事件”
    }
   }
  }

  對應的partial方法如下:

    partial void OnAccessKeyChanging(string value);
    partial void OnAccessKeyChanged();

  看到這裡,我想熟悉.NET控制項(不論是WinForm控制項還是WebForm控制項)的朋友,一定對這個Changing和Changed很眼熟。

  好了,我感覺自己廢話越來越多了。P大個事說半天。

  簡言之,只要添加一個原始碼檔案,並擴充這個partial類,在其中實現partial方法即可完成對欄位的驗證。如:

  public const int AccessKeyMaxLength = 32;

  partial void OnAccessKeyChanging(string value)
  {
   if(value.Length >= AccessKeyMaxLength)
    throw new Exception();
  }

  注意這裡“處理了OnAccessKeyChanging事件”,因為要在屬性值設定之前進行驗證。

  其實Anders Liu要說的就這麼點,over。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.