2

LINQ to SQL を使用して Windows フォーム アプリケーションを構築しています。dbml ファイルから自動生成されたコードを使用しています。

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 は政府が提供するブラジルの企業識別番号です。

4

2 に答える 2

0

既存のプロパティを変更しようとするのではなく、新しいプロパティを作成します。

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

基になる CNPJ プロパティに誰もアクセスできないようにする場合は、デザイナーで非公開に設定できます (列プロパティ ウィンドウのアクセス修飾子コンボボックス)。重大な変更を避けたい場合は、そのプロパティの名前を に変更し_CNPJてプライベートにし、上記の「ラッパー」プロパティに名前を付けることもできます。CNPJ

于 2011-09-19T01:34:39.657 に答える
0

LINQ to SQL は、クラスを部分クラスとして作成します。別のファイルに別の部分クラスを作成できますが、クラス名は同じで、動作を変更できます。

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

詳しくはこちらをご覧ください。

于 2011-09-17T21:23:15.793 に答える