C# 在asp.net中将第二个表添加到web api
我在AP.NET2013上使用实体框架创建了一个简单的WebAPI项目。它执行基本CRUD。该项目连接到一个SQL Server数据库,其中包含两个表-学生和科目。这两个表与卷号相连,卷号在学生中为PK,在受试者中为FK 当我只接触学生时,项目运行良好。当我添加代码来处理主题时,它也会给我一个C# 在asp.net中将第二个表添加到web api,c#,asp.net,sql-server,asp.net-web-api2,C#,Asp.net,Sql Server,Asp.net Web Api2,我在AP.NET2013上使用实体框架创建了一个简单的WebAPI项目。它执行基本CRUD。该项目连接到一个SQL Server数据库,其中包含两个表-学生和科目。这两个表与卷号相连,卷号在学生中为PK,在受试者中为FK 当我只接触学生时,项目运行良好。当我添加代码来处理主题时,它也会给我一个NotSupportedException 我正在Fiddler中运行此应用程序 我的代码如下: private StudentDBEntities db = new StudentDBEntities()
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();
}
private StudentDBEntities db=new StudentDBEntities();
//获取:api/学生
公共图书馆(学生)
{
返回db.Students.Select(s=>newsubjectdetailsdto
{
卷号=s卷号,
FirstName=s.FirstName,
LastName=s.LastName,
Class=s.Class,
性别=s.性别,
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; }
}
公共类SubjectDetailsTo
{
公共整数卷号{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共int类{get;set;}
公共字符串{get;set;}
公共列表主题{get;set;}
}
我添加了异常的快照:
编辑
学生会
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; }
}
公立部分班学生
{
公共整数卷号{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共int类{get;set;}
公共字符串{get;set;}
公共ICollection主题{get;set;}
}
科目C
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; }
}
公共部分类科目
{
公共整数卷号{get;set;}
公共int英语{get;set;}
公共整数数学{get;set;}
公共int科学{get;set;}
公共可为空的总计{get;set;}
//导航属性
公立学生学生{get;set;}
}
问题的根源在于实体框架不知道如何将Enumerable.ToList()
转换为将加载数据的SQL代码。
罪魁祸首是:
subjects = s.subjects.ToList()
为了避免这种情况,您可以在两个单独的请求中加入表或加载数据:
var students = db.Students.Select(s => {}).ToList();
var studentIds = students.Select(s=>s.Id).ToArray();
var subjects = db.Subjects.Where(s=>studentIds.Contains(s.StudentId))
.ToArray()
.GroupBy(s=>s.StudentId)
.ToDictionary(g=>g.Key, g=>g.ToList());
//Populate subjects for each student
students.ForEach(s=>
{
s.subjects = subjects.ContainsKey(s.Id)?subjects[s.Id]:new List<Subject>();
});
var students=db.students.Select(s=>{}.ToList();
var studentIds=students.Select(s=>s.Id).ToArray();
var subjects=db.subjects.Where(s=>StudentId.Contains(s.StudentId))
.ToArray()
.GroupBy(s=>s.StudentId)
.ToDictionary(g=>g.Key,g=>g.ToList());
//为每个学生填充科目
学生。ForEach(s=>
{
s、 subjects=subjects.ContainsKey(s.Id)?subjects[s.Id]:新列表();
});
此行是否生成错误?subjects=s.subjects.ToList()整个return语句似乎有问题a但首先确定return语句的行cam请发布用于存储值的类文件i没有为数据库设置种子。它不是localDB。我用数据连接到一个外部SQL server。@PallaviPrasad,你能在它抛出的地方贴一行吗?我用了你的代码。错误出现在第一行var students=db.students.Select(s=>newsubjectdetailsdto{}.Tolist()代码>