我有一个将对象存储在 raven db 中的 Web 项目。为简单起见,这些类位于 Web 项目中。
我现在有一个批处理作业,它是一个单独的应用程序,需要查询同一个数据库并从中提取信息。
有没有办法告诉 raven 将文档映射到批处理作业项目中与 Web 项目中具有相同属性的类。
如果需要,我可以创建一个仅包含这些类的共享 dll。虽然似乎不必要的麻烦
我有一个将对象存储在 raven db 中的 Web 项目。为简单起见,这些类位于 Web 项目中。
我现在有一个批处理作业,它是一个单独的应用程序,需要查询同一个数据库并从中提取信息。
有没有办法告诉 raven 将文档映射到批处理作业项目中与 Web 项目中具有相同属性的类。
如果需要,我可以创建一个仅包含这些类的共享 dll。虽然似乎不必要的麻烦
只要您要反序列化的类的结构与数据的结构部分匹配,它就不会产生影响。
RavenDB 服务器根本不关心您在客户端使用什么类。如果您针对不同的平台,您当然可以共享一个 dll,甚至共享一个可移植的 dll。但是你是对的,没有必要。
但是,您应该了解Raven-Clr-Type
元数据值。RavenDB 客户端在存储原始文档时会设置此项。客户端使用它来协助反序列化,但它没有完全强制执行。逻辑基本上是这样的:
is there ClrType metadata?
if yes, do we have that type loaded in the current app domain?
if yes, then deserialize into that type
if none of the above, then deserialize dynamically and cast into the type
requested (basically, duck-typing)
您可以在 github 上的源代码中查看这部分内部结构。