我应该为创建和更新使用不同的 DTO 吗?(CRUD)

Sup*_*JMN 9 .net c# entity-framework dto

我正在设计一个 Web API,对 Person 实体执行通常的 CRUD 操作。

问题是我不知道如何设计 DTO。

实体如下:

public class Person 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经确定 DTO 应该拥有相同的成员:

public class PersonDto 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这对于 Update 操作是有意义的,但是 Create 呢?Id 是由 Create 操作 ifself 创建的,因此在 DTO 中使用 Id 不符合语义。

我应该创建 2 个不同的 DTO,一个有 Id,另一个没有 Id?

最好的选择是什么?你有不同的 DTO 来创建和更新吗?

tec*_*h-y 0

您不需要另一个 DTO 来进行创建操作。您只需设置默认值(id=0)即可创建新对象。这将帮助您确定该对象是否尚未在数据库中创建,以防万一。不过,如果您将 ID 为零的 DTO 传递给用于创建操作的方法,您将永远不会遇到任何问题。

  • 好吧,听起来不错。然而,我发现我的 Web API 的 Create 操作正在接受 Id,这很具有误导性,尽管它会被忽略。例如,我现在正在使用 Swagger,在 Create 操作的示例值中,它显示 { "Id": 0, "Name" = "string", "Age" = 0 },其中应该只显示 Name 和年龄。 (4认同)