首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq到sql对象是否可序列化为会话状态?

Linq到sql对象是否可序列化为会话状态?
EN

Stack Overflow用户
提问于 2009-10-29 13:37:19
回答 3查看 4.4K关注 0票数 4

而不去探讨这是好主意还是坏主意:

当会话是out-of-process 时,可以在ASP.NET会话中存储LINQ域对象吗?

编辑我目前收到了以下错误,并问了这个问题,因为我怀疑LINQ对象:

无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET将序列化会话状态对象,因此不允许非序列化对象或MarshalByRef对象。如果自定义会话状态存储在“自定义”模式下执行类似的序列化,则同样的限制也适用。/EDIT

例如:

代码语言:javascript
复制
Session["Zoo"] = new Zoo() { 
                         new Lion(),
                         new Tiger(), 
                         new Elephant()
                  }

其中:

  • 动物园,狮子,老虎,大象都是从ZooDataContext里出来的

而web.config文件包含

代码语言:javascript
复制
<sessionState
       mode="StateServer"
       stateConnectionString="tcpip=127.0.0.1:42424"
       stateNetworkTimeout="10"
       sqlConnectionString="SqlStateConnectionString"
       sqlCommandTimeout="30"
       timeout="20"
       regenerateExpiredSessionId="true"/>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-29 15:57:39

在存储在会话中或任何其他可能要序列化的内容之前,使用Dataacontract序列化程序序列化它们.最近在这里讨论

http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/81c84ff4-059b-474f-9c69-b8c59027fd48

票数 1
EN

Stack Overflow用户

发布于 2009-10-29 16:02:16

要使用二进制格式化程序(如SessionState使用,我相信),您需要自己从DBML生成代码(我目前使用的是Linq2Sql T4模板)。

以下需要标记为[NonSerialized]

  • EntityRef
  • EntitySet
  • 所有事件(你需要跳出框框去思考,为读者做练习)

此外,构造函数逻辑需要移动到OnCreated。您还必须确保在反序列化时调用OnCreated,以便该对象可以再次使用。这是用[OnDeserializing]属性完成的。

票数 4
EN

Stack Overflow用户

发布于 2009-10-29 13:45:10

我相信您需要将对象标记为可串行化。我不确定是否有办法对所有生成的对象这样做,但是对于要放入会话的对象,您可以创建一个部分类(例如Lion),并给它提供Serializable属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1643793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档