2011-09-17 2 views
2

LINQ to SQLを使用してWindowsフォームアプリケーションを構築しています。私は 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

OKですが、Get側はどうですか? Getイベントは呼び出されません。同じプロパティを取得して設定したいので、データバインドすることができます。 – Fabio

関連する問題