Как удалить формат из свойства 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 2

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);
    }
}

Смотритездесь для получения дополнительной информации.