不考虑这是好是坏:
当会话进程外时,是否可以在ASP.NET会话中存储LINQ-to-SQL域对象?
[编辑] 我目前收到以下错误并提出此问题,因为我怀疑LINQ-to-SQL对象:
无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象。如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则适用相同的限制。 [/编辑]
e.g。
Session["Zoo"] = new Zoo() {
new Lion(),
new Tiger(),
new Elephant()
}
其中:
并且web.config文件包含
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
stateNetworkTimeout="10"
sqlConnectionString="SqlStateConnectionString"
sqlCommandTimeout="30"
timeout="20"
regenerateExpiredSessionId="true"/>
答案 0 :(得分:4)
要使用二进制格式化程序(比如SessionState使用我相信), 你需要自己从DBML生成你的代码(我目前使用Linq2Sql T4模板)。
以下需要标记为[NonSerialized]
:
EntityRef
EntitySet
此外,构造函数逻辑需要移动到OnCreated
。您还必须确保在反序列化时调用OnCreated
,以便对象再次有用。这是使用[OnDeserializing]
属性完成的。
答案 1 :(得分:1)
我认为您需要将对象标记为可序列化。我不确定是否有办法为所有生成的对象执行此操作,但对于那些您正在进行会话的人,您可以创建一个部分类(例如Lion)并为其提供Serializable属性。
答案 2 :(得分:1)
在存储会话或其他任何可能要序列化的内容之前,使用datacontractserializer对它们进行序列化... Recently discussed here:
http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/81c84ff4-059b-474f-9c69-b8c59027fd48