我有这个版本化属性的实现
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 为自动属性创建版本化属性的空实例。我的 postharp 方面还将父实体的引用分配给新创建的版本化属性的空实例的 ParentEntity 属性。