我有一个存储在RavenDb中的实体映射文档,其中一个存储为“ string ”的属性应为“ DateTime ”。在我的C#代码中,我已将实体属性更改为“ DateTime ”,但从RavenDb中检索相同属性时抛出
异常“无法读取属性的值:{NameOfProperty}”由于dataType中的冲突。如何解决?
使用RavenDb 3.0版
{ “Accountexpires”:“11/31/9999 11:59:59 PM”, “Cn”:“XYZ”, “国家代码”:“0”, “Displayname”:null, “DistinguishedName”:“CN = XYZ,OU =域控制器,DC = XYZ,DC = XYZ” }
基本上在这个“Accountexpires”中是一个实体中的字符串,现在它是“ DateTime ”,所以在提取它时会出现错误,如前所述。
答案 0 :(得分:1)
string属性中的值对DateTime值无效,因此只是更改类型将不起作用。
考虑添加另一个DateTime字段并处理集合中的所有文档:加载文档,将Accountexpires字段解析为DateTime值并将其保存到新字段。然后更改代码以使用添加的DateTime字段。如果您不再需要,可以删除旧的字符串字段。
否则,您需要处理集合中的所有文档并将字符串更改为有效的RavenDB DateTime格式(9999-11-31T23:59:59.0000000),然后更改数据类型,它应该可以工作。
后一种方法的缺点是开关不是瞬时的,会有一段时间数据不一致。前一个过程允许您准备数据并立即切换代码。