【问题标题】:SQL Server Session Serialization in ASP.Net MVCASP.Net MVC 中的 SQL Server 会话序列化
【发布时间】:2013-12-09 21:35:21
【问题描述】:

我是 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 将序列化会话状态对象, 结果是不可序列化的对象或 MarshalByRef 对象 不允许。如果类似的序列化,同样的限制适用 由自定义会话状态存储在“自定义”模式下完成。 "

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

【问题讨论】:

    标签: sql-server asp.net-mvc session serialization


    【解决方案1】:

    只需将所有要在 Session 中存储其实例的类标记为可序列化。

    【讨论】:

    • 感谢您的建议。正如您从我的代码中看到的那样..我已将序列化属性放在部分类 MyClass 上。应用程序仍然抛出错误。到目前为止,应用程序只使用了一个类实例。
    • 我怀疑 MyClass 中有一个成员也应该标记为 Serializable。
    • 找到也需要设置为序列化的成员的最佳方法是什么?
    【解决方案2】:

    我终于解决了这个问题。

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

    dbContext.ObjectTrackingEnabled = false;

    示例代码:

    List empList = new List(); dbContext.ObjectTrackingEnabled = 假; empList = dbContext.SomeStoredProcedure().ToList() Session["employee"] = empList.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 2014-09-17
      • 1970-01-01
      • 2012-08-09
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多