Как удалить формат из свойства Linq?
Я строю приложение Windows Forms, используя LINQ to SQL. Im с помощью автоматически сгенерированного кода из файл 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 ответа:
Вместо того чтобы пытаться изменить существующее свойство, создайте новое свойство.
public partial class YourClass { public string FORMATTED_CNPJ { get { return APPLY_FORMAT(this._CNPJ); } set { this.CNPJ = REMOVE_FORMAT(value); } } }
Если вы не хотите, чтобы кто-либо обращался к базовому свойству CNPJ, вы можете установить для него значение private в конструкторе (combobox модификатора доступа в окне Свойства столбца). Вы даже можете переименовать это свойство в
_CNPJ
, сделать его частным, а затем назвать свое свойство 'wrapper' вышеCNPJ
, Если хотите избежать каких-либо критических изменений.
LINQ to SQL создает классы как разделяемые классы. Вы можете создать другой разделяемый класс в другом файле, но с тем же именем класса, а затем изменить поведение.
public partial class YourClass { partial void OnCNPJChanged() { this._CNPJ = REMOVE_FORMAT(value); } }
Смотритездесь для получения дополнительной информации.