我尝试在另一个类中保存复杂的类。实体中包含TypeMask。 TypeMask重载ToString方法,当保存Entity的时候到来时,想要以字符串形式自动保存Mask prop,当我需要加载Entity类时,自动将此字符串转换为TypeMask(TypeMask的构造函数可以使用string构建TypeMask)。那么我超载了什么,或者我继承了什么才能使它真实?
public class Entity
{
[Key]
public int Id { get; set; }
public TypeMask Mask { get; private set; }
}
答案 0 :(得分: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
。
另一种方法是拥有这样的属性(为简洁起见,跳过空检查)
public string TypeMaskString
{
get
{
return this.TypeMask.ToString();
}
set
{
this.TypeMask = new TypeMask(this.TypeMaskString);
}
}
现在可以修改TypeMask
对象,TypeMaskString
将始终返回最新值。但这可能会影响性能,因为它可能会多次将TypeMask
转换为字符串。比您可能怀疑的更频繁,因为EF的更改跟踪器在执行TypeMaskString
时始终会读取DetectChanges
,这是一个反复运行的过程。