如何从Linq属性中删除格式?

时间:2011-09-17 21:17:39

标签: linq linq-to-sql partial-classes generated-code

我正在使用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是由政府提供的巴西商业识别号码。

2 个答案:

答案 0 :(得分:0)

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

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

有关详细信息,请参阅here

答案 1 :(得分:0)

不是尝试更改现有属性,而是创建一个新属性。

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

如果您不希望任何人访问基础CNPJ属性,您可以在设计器中将其设置为private(列属性窗口中的访问修饰符组合框)。您甚至可以将该属性重命名为_CNPJ,将其设为私有,然后在CNPJ上方命名您的“包装”属性,以避免任何重大更改。