缓存代理 EF 对象到 AppFabric,新部署后无法检索对象

Cached proxied EF object to AppFabric, cannot retrieve object after new deployment

我们的应用程序正在缓存 Entity Framework 个对象,以便我们的负载平衡站点可以共享缓存的项目,而不是服务器 A 和 B 可能显示不同的内容(使用内存缓存)。

但是,在完成部署后,我们无法从缓存中检索对象。抛出以下错误:

反序列化器无法加载要反序列化的类型,因为在程序集 'EntityFrameworkDynamicProxies-MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 中找不到类型 'System.Data.Entity.DynamicProxies.Banner_FDE1BA817D206A7F0FED7955D1DAA7B97FEEF3213D26B91515A9AC18E73619EC'。检查被序列化的类型是否与被反序列化的类型具有相同的契约,并使用相同的程序集。

据我所知,我们已将旧 DLL 的 EF 代理版本 缓存到 AppFabric,现在检索此对象时 EF 被绊倒了,因为它不理解它的在我们的新 DLL 的上下文中键入。我们已经在这两个部署之间进行了一些迁移,因此有效地改变了数据库模型。

我该如何解决这个问题?我想我必须从 AppFabric 中删除缓存的对象并重新添加它们 - 但是我们可能会在推出的下一个版本中遇到同样的问题。

将繁重的对象(例如 EF 生成的代理类型)发送到缓存服务器绝不是一个好主意。您应该考虑使用小型、轻量级的 DTO 对象来与缓存服务器通信。

根据类型的复杂性,您甚至可以重复使用相同的实体类型;但是不是您从 EF 获得的实例,而是将它们复制到单独的实例,这些实例不是代理类型。考虑使用例如EmitMappers 在将对象发送到缓存服务器之前执行复制对象的工作。