我正在使用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是由政府提供的巴西商业识别号码。
答案 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
上方命名您的“包装”属性,以避免任何重大更改。