MongoDb C#自动为版本化属性的普通属性

时间:2013-06-27 20:22:44

标签: mongodb mongodb-.net-driver postsharp

我有版本化属性的实现

public class VersionedProperty<T>: Dictionary<int, T>, IParentEntityTracker //where T:IComparable<T>
{
    [BsonIgnore]
    public IVersionableEntity ParentEntity { get; set; }

    public VersionedProperty()
    {
    }

    public VersionedProperty(IVersionableEntity parentEntity)
    {
        ParentEntity = parentEntity;
    }

    public T Value
    {
        set
        {
            var curVal = Value;
            if (EqualityComparer<T>.Default.Equals(curVal, value))
                return;

            ParentEntity.AtLeastOneVersionedPropertyModified = true;
            this[ParentEntity.Version + 1] = value;
        }
        get
        {
            var key = ParentEntity.Version + (ParentEntity.AtLeastOneVersionedPropertyModified ? 1 : 0);
            var keys = Keys.Where(k => k<=key).ToList();
            if (!keys.Any())
                return default(T);
            var max = keys.Max();
            T res;
            TryGetValue(max, out res);
            return res;
        }
    }
}

最初我在文档中创建了一些未版本化的属性。让我们说

public class Product
{
public Decimal Price{get;set;}
}

过了一段时间后,我意识到我错了,我应该使用版本化属性

public class Product
{
public VersionedProperty<Decimal> Price{get;set;}
}

我希望现有文档中的旧值自动反序列化为此版本化属性,以避免在集合上编写更新查询。 有可能以某种方式干扰反序列化的过程吗?

这可能会有所帮助:我使用postsharp为autoproperties创建版本化属性的空实例。我的postharp方面还将父实体的引用分配给新创建的版本化属性的空实例的ParentEntity属性。

0 个答案:

没有答案