如何更改文档中的属性数据类型?

时间:2016-12-22 12:20:54

标签: c# ravendb

我有一个存储在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 ”,所以在提取它时会出现错误,如前所述。

1 个答案:

答案 0 :(得分:1)

string属性中的值对DateTime值无效,因此只是更改类型将不起作用。

考虑添加另一个DateTime字段并处理集合中的所有文档:加载文档,将Accountexpires字段解析为DateTime值并将其保存到新字段。然后更改代码以使用添加的DateTime字段。如果您不再需要,可以删除旧的字符串字段。

否则,您需要处理集合中的所有文档并将字符串更改为有效的RavenDB DateTime格式(9999-11-31T23:59:59.0000000),然后更改数据类型,它应该可以工作。

后一种方法的缺点是开关不是瞬时的,会有一段时间数据不一致。前一个过程允许您准备数据并立即切换代码。