2013-12-09 20 views
2

我是ASP.Net MVC的新手。任何帮助非常感谢解决我的问题。ASP.Net中的SQL Server会话序列化MVC

我在我的MVC应用程序中使用LINQToSQL数据库。为汽车中的一个产生的部分类(实施例MyClass的承担表MyClass的),我创建另一局部类作为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数据库表中填充。按应用程序抛出错误如下。

回答

0

最后我终于解决了这个问题。

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

dbContext.ObjectTrackingEnabled = false;

示例代码:

列表empList =新列表(); dbContext.ObjectTrackingEnabled = false; empList = dbContext.SomeStoredProcedure()。ToList() Session [“employee”] = empList。

0

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

+0

感谢您的建议。正如你可以看到我的代码..我已经把序列化属性的部分类MyClass。应用程序仍然会抛出错误。迄今为止,只有一个类的实例正在被应用程序使用。 – bp581

+0

我怀疑MyClass中有成员也应该标记为可序列化。 –

+0

什么是查找也需要设置为序列化的成员的最佳方式? – bp581