我可以这样修改ASP.NET会话对象吗?

我可以这样修改ASP.NET会话对象吗?,asp.net,Asp.net,假设我有一个“Employee”类的实例(oEmp),我想在会话中存储它 Session["CurrentEmp"] = oEmp; 如果我在oEmp中修改属性,如下所示: oEmp.Ename = "Scott"; 我是通过上述声明提及会议项目,还是仅指“oEmp” 如果我选择SQL Server会话状态(而不是InProc),情况也是如此 谢谢Asp.net会话将保留引用,因此您不需要执行以下操作: Session["CurrentEmp"] = oEmp; 修改oEmp后 我正在更新

假设我有一个“Employee”类的实例(oEmp),我想在会话中存储它

Session["CurrentEmp"] = oEmp;
如果我在oEmp中修改属性,如下所示:

oEmp.Ename = "Scott";
我是通过上述声明提及会议项目,还是仅指“oEmp”

如果我选择SQL Server会话状态(而不是InProc),情况也是如此


谢谢

Asp.net会话将保留引用,因此您不需要执行以下操作:

Session["CurrentEmp"] = oEmp;

修改oEmp后

我正在更新我的回复,因为我对会话数据序列化的理解不正确。我不打算删除这个答案,因为它可能有助于其他人理解会话是如何工作的。我要感谢@Guru指出这一点

无论会话模式如何,只有当请求成功时,会话数据才会更新回会话对象。因此,如果您已将引用对象分配给会话,然后在同一请求中更新该对象,则会话将保存更新的信息


请参阅:有关详细信息,会话变量作为引用类型保存,因此无需每次更新其值。
在您存储的对象实例中,只有对该对象的引用存储在会话变量中

这里有一些链接可以帮助您找到更多详细信息


Plase,请注意这一点:。在会话变量中存储不可序列化的对象是一种不好的做法。Joe,你的答案与ARS相矛盾。我现在很困惑:(阿尔斯,你的回答与乔相矛盾。我现在很困惑:(@ARS您能提供一些链接或资源来解释这一点吗?我对此感到非常惊讶,实际上,会话的行为方式不应该受到其所在位置的影响stored@Guru:根据我的理解,我已经回复了查询。但是,您可以参考并检查表1。状态客户端提供程序。其中提到在进程外对数据进行序列化。此外,我相信一旦序列化了对象,除非更新会话数据,否则将无法更改其状态。MSDN:会话状态值与开发人员可见的会话对象之间的绑定将持续到请求结束。如果请求成功完成,所有状态值将序列化回状态提供程序,并可供其他请求使用。“因此,在请求完成后,数据将被序列化。因此,无需更新会话变量。@ARS-我同意这一点-“一旦序列化了对象,您将无法更改其状态…”-但我认为在保存之前,它实际上不会被序列化。
Session["CurrentEmp"] = oEmp;