我是 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 回答
只需标记为 Serializable 所有要在 Session 中存储其实例的类。
最后我能够解决这个问题。
解决方案:在查询数据库之前添加以下语句。在我的情况下,我正在调用 LinqToSQl 上下文(dbContext)。
dbContext.ObjectTrackingEnabled = false;
示例代码:
列表 empList = new List(); dbContext.ObjectTrackingEnabled = false; empList = dbContext.SomeStoredProcedure().ToList() Session [1] = empList。