首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#中来自ConcreteClass的项目无法与GET和POST调用一起正常工作

C#中来自ConcreteClass的项目无法与GET和POST调用一起正常工作
EN

Stack Overflow用户
提问于 2020-10-11 01:59:45
回答 1查看 32关注 0票数 0

我对网络编程非常陌生,这是我的第一个项目,使用任何与网络相关的东西,所以请温文尔雅。

我正在使用实体框架中的InMemoryDatabase,我希望通过GET方法从实体框架中发送一些关于项目的数据,并使用POST方法接收一些数据。问题是我不能让他们两个都工作。

项目类如下所示:

代码语言:javascript
复制
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调用:

代码语言:javascript
复制
    // GET api/projects
    [HttpGet]
    public IActionResult Get() //async
    {
        return Ok(_context.Projects);
    }

我的问题是,当我在前端发送这个信息时,我得到了一个空数组用于WorkEntries,即使我明确地这样设置它:

代码语言:javascript
复制
    var testProject1 = new Project("...", new System.DateTime(...), new System.DateTime(...));
    Stubs.PopulateWorkEntries(testProject1);

    context.Projects.Add(testProject1);

    context.SaveChanges();

PopulateWorkEntries只返回一个数组,其中包含workEntries的值。实际上,这些信息就在那里,但不能从get调用中获得。

我为我的类使用了多个配置,但有些配置使用了get,而不是POST,例如:

代码语言:javascript
复制
    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个工作。我试着调试,但没有找到任何东西。

EN

Stack Overflow用户

发布于 2020-10-11 02:22:10

你的类"Project“需要一个空的构造函数,试着把你的类改成这样:

代码语言:javascript
复制
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函数进行调用:

代码语言:javascript
复制
// 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

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64296612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档