Session Azure Appfabric缓存服务用作会话状态提供程序时EF动态代理问题

Session Azure Appfabric缓存服务用作会话状态提供程序时EF动态代理问题,session,caching,azure,state,azure-appfabric,Session,Caching,Azure,State,Azure Appfabric,我们正在尝试将我们的内部SAAS应用程序迁移到WindowsAzure,并且我们专门为一个模块使用了很多实体框架。作为迁移的一部分,我们尝试分阶段迁移和测试应用程序。我们正在尝试使用Azure appfabric缓存服务作为会话状态提供程序 当我尝试将会话状态配置为appfabric缓存时,我们遇到了与Entity framework相关的这些问题,请参见错误2。首先我们得到了这个错误1。为了解决这个问题,我们将类命名为[DataContract],问题已经解决 错误1。 System.Runt

我们正在尝试将我们的内部SAAS应用程序迁移到WindowsAzure,并且我们专门为一个模块使用了很多实体框架。作为迁移的一部分,我们尝试分阶段迁移和测试应用程序。我们正在尝试使用Azure appfabric缓存服务作为会话状态提供程序

当我尝试将会话状态配置为appfabric缓存时,我们遇到了与Entity framework相关的这些问题,请参见错误2。首先我们得到了这个错误1。为了解决这个问题,我们将类命名为[DataContract],问题已经解决

错误1。 System.Runtime.Serialization.InvalidDataContractException:无法序列化类型“XX.XX.XXX”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。如果类型是集合,请考虑用CopyDATAcNoTractAttor标记它。有关其他受支持的类型,请参阅Microsoft.NET Framework文档

错误2。 无法设置类型“CaXXXXX_9FDDBE5B2C99F9C5DE2E0DCD2E8CC77D2CB59220D1A3413E91AF5A2B6A23026D”上的属性“AdXXXXXX”,因为集合已设置为EntityCollection

我们完全不知道如何解决这些问题,当谷歌搜索到一些线程时,它们告诉我们需要删除属性的虚拟访问修饰符。但是,相同的代码可以解决任何类似这样的问题,并且该代码在模型的每次更新时由EF自动生成。在第二次机会中,我们还可以选择SQLAzure作为会话状态提供程序,但我们希望也会存在同样的问题,因为数据在存储到会话中时需要序列化


我们没有使用延迟加载,当我们从数据库更新模型时,类由EF自动生成。

除了用于延迟加载/导航属性的属性之外,您是否可以尝试从所有属性中删除virtual关键字,即:从所有本机类型中删除它


参考:

我们没有使用延迟加载,当我们从数据库更新模型时,类由EF自动生成。我们不能控制EF生成的类。或者我们需要手动删除虚拟属性。不,我不会手动删除虚拟关键字。能否尝试关闭更改跟踪:context.SomeTable.MergeOption=MergeOption.NoTracking;在哪里可以添加选项MergeOption.NoTracking在表上,基本上我们尝试添加属性,但仍然遇到相同的问题。我们可以通过向自动生成类的成员添加DataContract和DataMembers来解决上述问题,而不必删除virtual关键字,但仍然无法找到使用sesion状态在Azure Appfabric中存储实体对象的完整解决方案。当方法返回集合时,无法序列化错误类型“System.Collections.Generic.ICollection`1[SB.Mpm.Entity.Client]”。