2011-09-17 66 views
2

我正在使用LINQ to SQL構建Windows Forms應用程序。我正在使用 dbml文件中的自動生成的代碼。如何從Linq屬性中刪除格式?

的Visual Studio生成的CNPJ財產這段代碼從我的表:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CNPJ", DbType="VarChar(20) NOT NULL", CanBeNull=false)] 
public string CNPJ 
{ 
get 
{ 
    return this._CNPJ; 
} 
set 
{ 
    if ((this._CNPJ != value)) 
    { 
    this.OnCNPJChanging(value); 
    this.SendPropertyChanging(); 
    this._CNPJ = value; 
    this.SendPropertyChanged("CNPJ"); 
    this.OnCNPJChanged(); 
    } 
} 
} 

和我想要的東西是這樣的:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CNPJ", DbType="VarChar(20) NOT NULL", CanBeNull=false)] 
public string CNPJ 
{ 
get 
{ 
    return APPLY_FORMAT(this._CNPJ);//Changed here 
} 
set 
{ 
    if ((this._CNPJ != value)) 
    { 
    this.OnCNPJChanging(value); 
    this.SendPropertyChanging(); 
    this._CNPJ = REMOVE_FORMAT(value); /// Changed here 
    this.SendPropertyChanged("CNPJ"); 
    this.OnCNPJChanged(); 
    } 
} 
} 

但我會失去這個變化的時候,代碼重新產生。 問題是:完成此行爲的正確方法是什麼(繼承和重寫,捕獲更改事件,其他)?

如果您好奇,CNPJ是由政府提供的巴西商業識別號碼。

回答

0

與其嘗試更改現有屬性,不如創建一個新屬性。

public partial class YourClass 
{ 
    public string FORMATTED_CNPJ 
    { 
     get 
     { 
      return APPLY_FORMAT(this._CNPJ); 
     } 
     set 
     { 
      this.CNPJ = REMOVE_FORMAT(value); 
     } 
    } 
} 

如果你不希望任何人的根本屬性CNPJ您可以設置其訪問私人的設計師(訪問修飾符組合框的列屬性窗口)。您甚至可以將該屬性重命名爲_CNPJ,將其設爲私有,然後如果您想避免任何重大更改,則將您的'包裝器'屬性命名爲CNPJ以上。

0

LINQ to SQL將類創建爲部分類。您可以在不同的文件中創建另一個部分類,但具有相同的類名,然後您可以更改該行爲。

public partial class YourClass 
{ 
    partial void OnCNPJChanged() 
    { 
     this._CNPJ = REMOVE_FORMAT(value); 
    } 
} 

有關更多信息,請參見here

+0

好的,但Get方面呢?無需調用任何事件。我想獲取並設置相同的屬性,以便可以將其綁定。 – Fabio