我对网络编程非常陌生,这是我的第一个项目,使用任何与网络相关的东西,所以请温文尔雅。
我正在使用实体框架中的InMemoryDatabase,我希望通过GET方法从实体框架中发送一些关于项目的数据,并使用POST方法接收一些数据。问题是我不能让他们两个都工作。
项目类如下所示:
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public IList<WorkEntry> WorkEntries { get; } = new List<WorkEntry>();
public Project(string name, DateTime startDate, DateTime endDate)
{
Id = Stubs.getUniqueID();
Name = name;
StartDate = startDate;
EndDate = endDate;
}
}我像这样做get调用:
// GET api/projects
[HttpGet]
public IActionResult Get() //async
{
return Ok(_context.Projects);
}我的问题是,当我在前端发送这个信息时,我得到了一个空数组用于WorkEntries,即使我明确地这样设置它:
var testProject1 = new Project("...", new System.DateTime(...), new System.DateTime(...));
Stubs.PopulateWorkEntries(testProject1);
context.Projects.Add(testProject1);
context.SaveChanges();PopulateWorkEntries只返回一个数组,其中包含workEntries的值。实际上,这些信息就在那里,但不能从get调用中获得。
我为我的类使用了多个配置,但有些配置使用了get,而不是POST,例如:
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public List<WorkEntry> WorkEntries { get; set; }
public Project( string name, DateTime startDate, DateTime endDate)
{
Id = Stubs.getUniqueID();
Name = name;
StartDate = startDate;
EndDate = endDate;
WorkEntries = PopulateWorkEntries(StartDate, EndDate);
}这个函数将WorkEntires发送到前端,但是一旦我为POST方法添加了空的构造函数,它就会停止发送带有get的WorkEntries。在这两个示例中,WorkEnties都填充了有效数据。
所以问题是我不能让他们同时使用get和POST。我只能设法让1个工作。我试着调试,但没有找到任何东西。
发布于 2020-10-11 02:22:10
你的类"Project“需要一个空的构造函数,试着把你的类改成这样:
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public IList<WorkEntry> WorkEntries { get; } = new List<WorkEntry>();
public Project(string name, DateTime startDate, DateTime endDate)
{
Id = Stubs.getUniqueID();
Name = name;
StartDate = startDate;
EndDate = endDate;
}
public Project(){}
}这是因为当从数据库调用时,EntityFramework需要一个不带参数的构造函数来生成对象
因此,要使用子集合进行调用,可以使用Include函数进行调用:
// GET api/projects
[HttpGet]
public IActionResult Get() //async
{
return Ok(_context.Projects.Include(x => x.WorkEntries));
}请阅读以下内容:https://docs.microsoft.com/en-us/ef/ef6/querying/related-data
https://stackoverflow.com/questions/64296612
复制相似问题