2015-02-08 24 views
0

我想我寧願沒有每次它使用的時間來手動加密這種數據採取更好的加密方法爲加密字段值LINQ到SQL

Person.FirstName = Encrypt(rawFirstName); 
Person.sensitiveInfo = Encrypt(sensitiveInfo); 

功能,所以我研究過修改.designer文件中的.dbml和Person對象。

我想出這個:

.dbml文件:

<Column Name="FirstName" Type="System.String" DbType="VarChar(256) NOT NULL" CanBeNull="false" /> 

了.Designer.cs文件:

public partial class Person : INotifyPropertyChanging, INotifyPropertyChanged 
{ 

    private string _FirstName; 

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FirstName", DbType="VarChar(256) NOT NULL", CanBeNull=false)] 
    public string FirstName 
    { 
     get 
     { 
      return Decrypt(this._firstName); 
     } 
     set 
     { 
      if (Decrypt(this._firstName) != value) 
      { 
       this.OnFirstNameChanging(value); 
       this.SendPropertyChanging(); 
       this._firstName = Encrypt(value); 
       this.SendPropertyChanged("FirstName"); 
       this.OnFirstNameChanged(); 
      } 
     } 
    } 
} 

我現在面臨的問題是,它在程序內部工作(我已經記錄了set之前/之後的值以確保),但實際上會將未加密的值保存到數據庫。它看起來像儲存_FirstName變量沒有被保存到數據庫,因爲我認爲,但get方法正在使用,而不是。

我看過this answer以及this one,但我不能在我的生活中確切地找出他們想要通過受保護的vs內部變量來解決什麼問題。有沒有簡單的我失蹤?

回答

1

這樣做的最好方法是對生成的類使用部分類。存儲在數據庫中的字段應該是FirstNameSecure,LastNameSecure等。

然後在部分類中創建將加密/解密其安全版本的屬性FirstName,LastName等。

+0

如何映射數據庫中的FirstNameSecure字段以使用部分類?我是否修改.dbml文件中的名稱/成員屬性? – 2015-02-08 23:14:58

+0

將數據庫中的名稱更改爲FirstNameSecure,然後使用FirstName的定義創建一個包含分部類的新文件。 – 2015-02-08 23:24:22

+0

我花了3個月的時間來弄清楚你在說什麼,但我終於明白了。謝謝。 – 2015-05-12 19:16:46