我有版本化属性的实现
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属性。