EF保存复杂类的方法

时间:2014-10-13 06:26:21

标签: c# entity-framework type-conversion

我尝试在另一个类中保存复杂的类。实体中包含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; }
}

1 个答案:

答案 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,这是一个反复运行的过程。