首页 文章

ASP.Net MVC 中的 SQL Server 会话序列化

提问于
浏览
2

我是 ASP.Net MVC 的新手。在解决我的问题时,非常感谢任何帮助。

我在我的 MVC 应用程序中使用 LINQToSQL 数据库。对于其中一个自动生成的部分类(示例 MyClass 假设为表 MyClass),我创建了另一个 Partial 类作为 MyClass 并添加了 DataAnnotations 如下所示......

namespcae NP
{
 [MetadaType(typeof(myData))]
[Serializable()]
public partial class MyClass
{

 }

 public myData 
{
   [Required]
   public string ID { get ; set ;}

   // Other properties are listed here

}
}

在我的控制器类示例 MyHomeController 中

我有一个代码如下:

List<MyClass> list = new List<MyClass>();

list = dbContext.StoredProcedure(null).ToList<MyClass>()
session["data"] = list.

如果我使用 inProc 会话状态,上面的代码工作正常。但是,如果我使用 SQLServer 模式,那么我会得到错误

“无法序列化会话状态。在'StateServer'和'SQLServer'模式下,ASP.NET 将序列化会话状态对象,因此不允许使用 non-serializable 对象或 MarshalByRef 对象。如果类似的序列化由“自定义”模式下的自定义会话状态存储。“

谁能告诉我这里做错了什么..?我可以看到数据在 ASPState 数据库表中填充。按应用程序抛出错误如下。

2 回答

  • 0

    只需标记为 Serializable 所有要在 Session 中存储其实例的类。

  • 0

    最后我能够解决这个问题。

    解决方案:在查询数据库之前添加以下语句。在我的情况下,我正在调用 LinqToSQl 上下文(dbContext)。

    dbContext.ObjectTrackingEnabled = false;

    示例代码:

    列表 empList = new List(); dbContext.ObjectTrackingEnabled = false; empList = dbContext.SomeStoredProcedure().ToList() Session [1] = empList。

相关问题