這裏有一個辦法做到這一點:
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
,這是一個重複運行的過程。