2014-10-13 28 views
0

我嘗試將複雜類保存在另一個類中。 TypeMask包含在Entity中。 TypeMask重載ToString方法,並且當保存實體的時間到來時,希望automaticaly以字符串形式保存Mask prop,並且當我需要將實體類加載回自動時,將此字符串轉換爲TypeMask(TypeMask的構造函數可以使用字符串構建TypeMask)。那麼,我有什麼重載或從我繼承了什麼來實現它?EF保存複雜類的方法

public class Entity 
{ 
    [Key] 
    public int Id { get; set; } 

    public TypeMask Mask { get; private set; } 
} 

回答

1

這裏有一個辦法做到這一點:

public class Entity 
{ 
    private TypeMask _typeMask; 

    [Key] 
    public int Id { get; set; } 

    public string TypeMaskString { get; set; } 

    [NotMapped] 
    public TypeMask Mask 
    { 
     get 
     { 
      if (this._typeMask == null && !string.IsNullOrEmpty(TypeMaskString)) 
      { 
       this._typeMaks = new TypeMask(this.TypeMaskString); 
       // Or some other way to create a TypeMask from string. 
      } 
      return this._typeMask; 
     } 
     set 
     { 
      this._typeMask = value; 
      this.TypeMaskString = value.ToString(); 
     } 
    } 
} 

有一些事情要記住這裏。當您的代碼對TypeMask對象進行修改時,必須再次設置對象以更新TypeMaskString。當然,這是容易出錯和精細的,所以你想確保TypeMask可以通過一種方法修改(可能是Entity中的方法)。

另一種方法是有一個這樣的屬性(跳過null檢查爲了簡潔)

public string TypeMaskString 
{ 
    get 
    { 
     return this.TypeMask.ToString(); 
    } 
    set 
    { 
     this.TypeMask = new TypeMask(this.TypeMaskString); 
    } 
} 

現在TypeMask對象可以被修改和TypeMaskString將總是返回一個上的最新值。但這可能會影響性能,因爲它可能會多次將TypeMask轉換爲字符串和從字符串轉換。比你可能懷疑的更頻繁,因爲EF的變更跟蹤器在執行DetectChanges時總會讀取TypeMaskString,這是一個重複運行的過程。