【发布时间】:2015-12-09 01:51:42
【问题描述】:
我的应用程序上有这个实体和 dbcontext:
[Serializable, Table("calc.Student")]
public class Student
{
public int Id { get; set; }
}
public StudentDbContext() : base("name=DefaultConnection")
{
}
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
我的 DTO 课程:
[Serializable]
public class StudentDTO
{
public int Id { get; set; }
}
我的 api 控制器:
public IQueryable<StudentDTO> Get()
{
var students = from b in db.Students
select new StudentDTO()
{
Id = b.Id
};
return students ;
}
现在我的问题是我的会话状态。在我的 web.config 文件中,我陈述了下面的代码,以便我可以将我的会话存储在数据库中:
<sessionState mode="SQLServer" allowCustomSqlDatabase="true" cookieless="false"
使用这行代码,我收到此错误:
无法序列化会话状态。在“状态服务器”和 'SQLServer' 模式,ASP.NET 将序列化会话状态对象, 结果是不可序列化的对象或 MarshalByRef 对象 不允许。如果类似的序列化,同样的限制适用 由自定义会话状态存储在“自定义”模式下完成。
我认为返回 DTO 对象可以解决我的问题,但现在我被卡住了。
有什么想法吗?
【问题讨论】:
-
不完全确定 api 调用如何与您的 会话状态 基于此代码 - 但是,您可能会幸运地将其更改为返回
List<StudentDTO>而不是 @ 987654326@ -
此外,带有 EF 代理的类是可序列化的(急切加载),因此您不需要 DTO 对象。就像 Rob 说的,看这段代码,问题可能是 IQueryable.
标签: c# asp.net-mvc entity-framework session serialization