我在AP.Net 2013上使用Entity Framework创建了一个简单的web api项目。它执行基本的CRUD。该项目连接到SQL Server数据库,其中包含2个表 - 学生和主题。这两个表与Roll编号相关联,滚动编号是学生中的PK和主题中的FK。
当我只访问学生时,该项目工作正常。当我添加代码来处理主题时,它给了我NotSupportedException
。
我在Fiddler中运行这个应用程序。
我的代码如下:
private StudentDBEntities db = new StudentDBEntities();
// GET: api/Student
public IList<SubjectDetailsDto> GetStudents()
{
return db.Students.Select(s => new SubjectDetailsDto
{
Roll_Number = s.Roll_Number,
FirstName = s.FirstName,
LastName = s.LastName,
Class = s.Class,
Gender = s.Gender,
subjects = s.subjects.ToList()
}).ToList();
}
有谁能告诉我为什么会发生异常?
编辑: SubjectDetailsDto.cs
public class SubjectDetailsDto
{
public int Roll_Number { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Class { get; set; }
public string Gender { get; set; }
public List<Subject> subjects { get; set; }
}
修改
Student.cs
public partial class Student
{
public int Roll_Number { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Class { get; set; }
public string Gender { get; set; }
public ICollection<Subject> subjects { get; set; }
}
Subject.cs
public partial class Subject
{
public int Roll_Number { get; set; }
public int English { get; set; }
public int Mathematics { get; set; }
public int Science { get; set; }
public Nullable<int> Total { get; set; }
//navigation property
public Student student { get; set; }
}
答案 0 :(得分:0)
问题的根源在于实体框架不知道如何将stdin
转换为将加载数据的SQL代码。
罪魁祸首是这一行:
stdin
为了避免这种情况,您可以加入表格或在两个单独的请求中加载数据:
Enumerable.ToList()