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

LINQ to SQL 将类创建为部分类。您可以在不同的文件中创建另一个具有相同类名的部分类,然后您可以更改行为。

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

请参阅此处了解更多信息。

于 2011-09-17T21:23:15.793 回答
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 回答